HTML кодирует вводимые пользователем данные при сохранении или отображении - PullRequest
28 голосов
/ 22 октября 2008

Простой вопрос, который продолжает беспокоить меня.

Должен ли я кодировать HTML-код пользователя сразу же и сохранять закодированное содержимое в базе данных, или мне следует сохранять необработанные значения и кодировать HTML при отображении?

Хранение закодированных данных значительно снижает риск того, что разработчик забудет закодировать данные при их отображении. Однако хранение закодированных данных сделает сбор данных несколько более громоздким и займет немного больше места, хотя обычно это не проблема.

Ответы [ 5 ]

25 голосов
/ 22 октября 2008

Я бы настоятельно рекомендовал кодировать информацию на выходе. Хранение необработанных данных в базе данных полезно, если вы хотите изменить способ их просмотра в определенный момент. поток должен быть похож на:

sanitize user input -> protect against sql injection -> db -> encode for display

Подумайте о ситуации, когда вам может потребоваться отобразить информацию в виде RSS-канала. необходимость переделывать какую-либо специфическую HTML-кодировку перед повторным отображением кажется немного глупой. любая разработка всегда должна следовать мему «не доверяйте вводу», независимо от того, вводится ли он пользователем или базой данных.

6 голосов
/ 22 октября 2008

Выход.

С HTML вы не можете просто проверить длину строки (& это 1 символ, но strlen() скажет вам 5), вы можете легко обрезать ее (это может нарушить сущности).

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

PHP пытался сделать то же самое с magic_quotes, и это оказалось огромным провалом. Не выбирайте маршрут magic_entities! :)

6 голосов
/ 22 октября 2008

Кодирование должно выполняться только только на дисплее. Без исключения.

5 голосов
/ 22 октября 2008

Имейте в виду, что вам может понадобиться доступ к базе данных с помощью чего-то, что не понимает HTML-кодированный текст (например, инструмент отчетности). Я согласен с тем, что пространство не является проблемой, но имхо, размещение HTML-кодировки в базе данных переносит знание вашего представления / внешнего интерфейса на самый нижний уровень в приложении, и это ошибка проектирования.

0 голосов
/ 28 сентября 2009

Не противоречит ли это цели кодирования? Если в качестве входных данных вводится вредоносный сценарий sql, который затем передается в базу данных, это может вызвать огромную проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...