HTML кодирует вводимые пользователем данные при сохранении или отображении

StackOverflow https://stackoverflow.com/questions/223480

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Вывод.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top