Как правильно санировать данные, полученные из текстовой области, при выводе их обратно в текстовую область? - PullRequest
7 голосов
/ 27 февраля 2009

Пользователь будет вводить текст в текстовой области. Затем он вставляется непосредственно в базу данных MySQL. Я использую обрезку, htmlentities, mysql_real_escape_string и у меня включены магические кавычки. Как мне санировать его при выводе этих данных обратно в текстовую область?

Спасибо за вашу помощь. Я никогда не был слишком уверен в правильном способе сделать это ...

Ответы [ 2 ]

14 голосов
/ 27 февраля 2009

Вы не должны использовать htmlentities при сохранении. Вы должны использовать htmlentities при отображении. Основное правило - не кодировать и не обрабатывать данные, пока вам это не понадобится. Если вы делаете htmlentities для него при сохранении, тогда вы должны сделать html_entity_decode для текста, когда пользователь хочет редактировать ввод. Таким образом, вы продезинфицировать для того, что вам нужно, и не более того. При его сохранении необходимо выполнить дезинфекцию для SQL-инъекции, поэтому вы mysql_real_escape_string. При отображении вам необходимо выполнить дезинфекцию для XSS, чтобы вы htmlentities это.

Кроме того, я не уверен, что вы видели комментарий Даррила Хейна, но вы действительно не хотите, чтобы magic_quotes включался. Это плохая, плохая вещь , она устарела с PHP 5.3 и полностью исчезнет в PHP 6.

2 голосов
/ 27 февраля 2009

В дополнение к ответу Паоло о том, когда использовать htmlentities(), если вы не используете старую версию PHP, правильным способом очистки для вставки в базу данных mysql является использование Подготовленные операторы , которые являются частью расширения mysqli . Это заменяет любую необходимость использовать mysql_real_escape_string().

Кроме этого, я думаю, что у вас есть вещи.

...