работа с пользовательскими данными ввода в php. Что лучше? - PullRequest
2 голосов
/ 30 ноября 2009

Я пытаюсь выяснить, как лучше всего управлять данными, которые пользователь вводит относительно нежелательных тегов, которые он может вставить:

  • strip_tags () - теги удалены и не вставлены в базу данных
  • теги вставляются в базу данных, но при чтении этого поля и отображении его пользователю мы будем использовать htmlspecialchars ()

Что лучше, и есть ли какой-нибудь недостаток в этом?

Привет

Ответы [ 3 ]

3 голосов
/ 30 ноября 2009

Это зависит от вашего приоритета:

  • если важно отображать специальные символы из пользовательского ввода (как, например, в StackOverflow), то вам нужно будет сохранить эту информацию в базе данных и санировать ее на дисплее - в этом случае вы захотите хотя бы используйте htmlspecialchars(), чтобы отобразить вывод (если не что-то более сложное)
  • , если вы хотите просто текстовые комментарии, используйте strip_tags() перед тем, как вставить его в базу данных - таким образом вы уменьшите объем данных, которые вам нужно сохранить, и сократите время обработки при отображении данных на экране
2 голосов
/ 30 ноября 2009

теги вставляются в базу данных, но при чтении этого поля и отображении его пользователю мы будем использовать htmlspecialchars ()

Это. Обычно вы хотите, чтобы люди могли печатать меньше знаков и амперсандов и отображать их как таковые на странице. htmlspecialchars на каждом шаге вывода текста в HTML (независимо от того, был ли этот текст получен непосредственно из пользовательского ввода, либо из базы данных, либо из какого-то другого места), является правильным способом достижения этого. Неразбериха с вводом - не совсем подходящая тактика для решения проблемы кодировки вывода.

Конечно, вам понадобится другой escape - или параметризация - для помещения текста в строку SQL .

0 голосов
/ 30 ноября 2009

Меры, принимаемые для обеспечения безопасности ввода пользователя, полностью зависят от того, в каком контексте используются данные. Например:

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

Последний пункт выше переходит к следующему пункту: многие считают, что исходные данные всегда должны сохраняться. Это имеет большой смысл, когда позже вы решите использовать данные по-другому, и, например, теги HTML не будут иметь большого значения в новом контексте. Кроме того, если ваш сайт каким-либо образом скомпрометирован, у вас есть запись точного ввода данных.

Специально относится к тегам HTML в пользовательском вводе, предназначенном для отображения на странице HTML: если у пользователя есть какая-либо разумная причина для ввода тегов HTML, просто избегайте их. Если нет, удалите их перед отображением.

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