Когда проводить санитарную обработку в CakePHP - PullRequest
8 голосов
/ 30 января 2010

читаю из кулинарной книги (с. 4.2)

CakePHP уже защищает вас от SQL-инъекций, если вы используете методы ORM в CakePHP (такие как find () и save ()) и правильную запись массива (т. Е. Array ('field' => $ value)) вместо исходного SQL. Для очистки от XSS обычно лучше сохранять необработанный HTML в базе данных без изменений и выполнять очистку во время вывода / отображения.

Итак, уверены ли мы, что нам НИКОГДА не нужно вручную очищать пользовательские данные от SQL, если мы ограничиваемся такими методами, как find () и save ()? Особенно, правда ли это, если я беру свои данные непосредственно из $ _POST, а не из $ this-> data? Другими словами, предположим, что я выполняю запрос find (), используя $ this-> data. Затем CakePHP выполняет очистку от SQL при записи в массив $ this-> data или при написании запроса для find ()?

Мой второй вопрос касается очистки данных для отображения. Является ли Sanitize :: html идемпотентом? Итак, могу ли я использовать его в своем методе beforeSave (), или он сломается во второй раз, когда я сохраняю, потому что он применяется снова и дает новый результат?

Ответы [ 3 ]

6 голосов
/ 30 октября 2010

Об этом вопросе:

CakePHP очищает от SQL при записи в массив $ this-> data или при написании запроса для find ()?

Cakephp не очищает данные $ this-> в контроллере, если вы проверите код торта, в Dispatcher :: parseParams () http://api13.cakephp.org/view_source/dispatcher/#line-244 вы увидите, что когда $ _POST копируется в данные контроллера, значения не продезинфицированы.

Однако, использование $ _POST не рекомендуется, потому что вы потеряете всю магию торта, полученную при использовании помощника по формам

0 голосов
/ 08 сентября 2010

Нет, это не повлияет на вас. Вы можете использовать его в before_save(). Вам понадобится дезинфекция, если вы используете любую пользовательскую функцию запроса, то есть функции, где вы можете использовать свой собственный запрос

0 голосов
/ 30 января 2010

Woah - Если вы берете свои данные непосредственно из $ _POST, чем , вам следует полностью очистить данные , если вы планируете публиковать данные на следующих страницах. Около 2 лет назад я вспоминал о страшном страхе, потому что было обнаружено, что простое внедрение SQL позволит использовать сайты с тортом 1.1 из-за разметки запросов на выборку, используемых для входа в систему.

Однако многие пользователи намеренно использовали старое правило для полей ввода, которые будут использоваться в SQL:

"Чтобы защитить от внедрения SQL, пользовательский ввод не должен быть напрямую встроен в операторы SQL. Вместо этого пользовательский ввод должен быть экранирован ....."

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

...