Меры, принимаемые для обеспечения безопасности ввода пользователя, полностью зависят от того, в каком контексте используются данные. Например:
- Если вы вставляете его в базу данных SQL, вы должны использовать параметризованные операторы. PHP
mysql_real_escape_string()
тоже работает прилично.
- Если вы собираетесь отображать его на странице HTML, вам нужно удалить или скрыть теги HTML.
- В общем, всякий раз, когда вы смешиваете пользовательский ввод с другой формой разметки или другим языком, элементы этого языка должны быть экранированы или удалены из ввода перед помещением в этот контекст.
Последний пункт выше переходит к следующему пункту: многие считают, что исходные данные всегда должны сохраняться. Это имеет большой смысл, когда позже вы решите использовать данные по-другому, и, например, теги HTML не будут иметь большого значения в новом контексте. Кроме того, если ваш сайт каким-либо образом скомпрометирован, у вас есть запись точного ввода данных.
Специально относится к тегам HTML в пользовательском вводе, предназначенном для отображения на странице HTML: если у пользователя есть какая-либо разумная причина для ввода тегов HTML, просто избегайте их. Если нет, удалите их перед отображением.