Пользователь вводит текст в текстовое поле. Затем он вставляется непосредственно в базу данных mySQL. Я использую trim, htmlentities, mysql_real_escape_string, и у меня есть магические кавычки. Как я должен дезинформировать его при возвращении этих данных в текстовое поле?
Спасибо за вашу помощь. Я никогда не был слишком уверен в правильном способе этого делать …
Вы не должны использовать htmlentities
при его сохранении. При отображении следует использовать htmlentities
. Эмпирическое правило заключается не в том, чтобы кодировать / дезинформировать данные до тех пор, пока вам не понадобится. Если вы делаете htmlentities
на нем при сохранении, вам нужно сделать html_entity_decode
в тексте, когда пользователь хочет отредактировать вход. Поэтому вы санируете за то, что вам нужно, и больше ничего. При его сохранении вам необходимо дезинформировать SQL-инъекцию, так что вы mysql_real_escape_string
. При отображении вам нужно санировать XSS, так что вы htmlentities
его.
Кроме того, я не уверен, что вы видели комментарий Даррила Хейна, но вы действительно не хотите, чтобы magic_quotes были включены. Они плохое, плохое, и они устарели от PHP 5.3 и полностью исчезнут в PHP 6.
В дополнение к ответу Паоло о том, когда использовать htmlentities()
, если вы не используете старую версию PHP, правильный способ дезинфекции для вставки в базу данных mysql состоит в том, чтобы использовать подготовленные выражения, которые являются частью расширения mysqli . Это заменяет любую необходимость использования mysql_real_escape_string()
.
Кроме этого, я думаю, что у вас есть вещи.