PDO в Codeigniter - защита против SQL-инъекций - PullRequest
9 голосов
/ 13 февраля 2011

Истинные эксперты по безопасности PHP, подходит ли PDO, или я согласен с классом Active Record Codeigniter?

Я прочитал http://codeigniter.com/forums/viewthread/179618/ и не убежден на 100%.
Я обычно полагаюсь на экспертов, таких как Крис Шифлетт и OWASP для советов по безопасности. http://shiflett.org/blog/2006/jul/the-owasp-php-top-5

Вместо файлов базы данных Codeigniter использовался самодельный класс БД PDO. Каждый раз, когда я загружаю файл, копировать его - сравнительно небольшая боль. Основная причина, по которой я использую PDO, заключается в защите от SQL-инъекций против использования Active Record.

РЕДАКТИРОВАТЬ: НЕ БУДЕТ ШИЛЛ но я написал пост после того, как факт интеграции PDO в Codeigniter . Если у кого-то есть отзывы, я был бы рад услышать.

Ответы [ 4 ]

9 голосов
/ 14 февраля 2011

Ну, есть общий ответ на все вопросы такого рода:

Это не палочка, это волшебник.

(не знаю, откуда я взял это высказывание, но, похоже, я им пользуюсь только один, но, скорее всего, я его неправильно написал)

В самой технологии нет ничего хорошего или плохого.
Все зависит от рук, которые его используют.

  1. В mysql нет ничего небезопасного, если его правильно использовать.
  2. ЗОП - это не волшебная эгида, которая покрывает вашу спину от всех опасностей только своим присутствием.

Каждый раз, когда я вижу неуместные разговоры о внедрении SQL, речь всегда идет о динамических данных * только 1019 *.
В то время как наибольшая опасность исходит от других частей запроса - скажем, от динамических идентификаторов. Где PDO может сделать чуть меньше ничего , чтобы справиться с ними.

Таким образом, не может быть определенного ответа.
Вы можете использовать любую понравившуюся вам технологию, если вы понимаете, что делаете.
И наоборот, если вы не понимаете, как это работает, а просто верите , что какая-то технология выполняет вашу работу по защите вашего приложения, вы уже в беде.

Вот и все.

6 голосов
/ 14 февраля 2011

Согласно странице, на которую вы ссылались, класс Active Record использует mysql_ функции для экранирования строк. Это означает, что он все еще строит строки SQL в PHP-земле вместо использования параметризованных API в базе данных. Хотя он может быть свободен от известных дефектов на данный момент, все же лучше использовать API, который следует более безопасному дизайну.

2 голосов
/ 14 февраля 2011

Если вы уже находитесь в удобной точке с вашей библиотекой PDO, нет причин прекращать ее использование в CI.Active Record - это здорово, если вы хотите следовать шаблонам CI, но вряд ли это требование в любом смысле.

1 голос
/ 14 февраля 2011

Взгляните на http://codeigniter.com/user_guide/database/queries.html

В последнем разделе, Привязки запросов, говорится, что вы можете использовать привязки запросов, которые автоматически экранируются.

Хотя это не совсем подготовленные утверждения, это эффективная симуляция того же.

...