Очистка ввода формы для администраторов

В области администрирования моего сайта я использовал mysqli_real_escape_string при получении ввода формы, который поступает в базу данных. Он отлично работает, но я понимаю, что он не предотвращает внедрение скриптов. Я имею в виду, что я могу пройти через такие сценарии, как:

<script>alert('hello');</script>

Что я использую в дополнение к этому, чтобы предотвратить внедрение злоумышленником каких-то неприятных вещей?

  • htmlentities()?
  • strip_tags()?
  • htmlspecialchars()?

Каков правильный способ очистки ввода формы в внутренних формах, где html не требуется для ввода данных? Я смущен?


person usnidorg    schedule 27.04.2011    source источник


Ответы (5)


htmlentities() и htmlspecialchars() используются при выводе данных. Кодирование и экранирование отличаются.

Если вам не нужен HTML, я рекомендую использовать strip_tags(), чтобы очистить его от любых тегов HTML, и использовать html* при выводе содержимого.

Кроме того, вы можете подумать о переходе на MySQL PDO. Это гораздо более предпочтительный и безопасный способ выполнения ваших запросов.

person JohnP    schedule 27.04.2011

Термин, который вы ищете, это Cross Site Scripting или XSS для краткости. Поиск по этому вопросу должен дать вам множество ресурсов, таких как этот вопрос прямо здесь, на StackOverflow. .

person Sander Marechal    schedule 27.04.2011

Правильный ответ сильно зависит от вашего приложения.

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

Как сказал JohnP, strip_tags() может быть удобным, так как второй параметр позволяет явно разрешать определенные, безвредные теги (например, или ), удаляя все остальное (например, или )

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

person timdev    schedule 27.04.2011

Вы должны использовать htmlentities() .

person Phliplip    schedule 27.04.2011

Вы можете использовать функцию magic_quotes для очистки, если вы используете php 4 или меньше, php 5.2 или меньше.

person dm7    schedule 27.04.2011
comment
@user493350 Вы могли сделать это, но я бы настоятельно рекомендовал этого не делать, как и Руководство по PHP. У него куча проблем с безопасностью. - person Dan Blows; 27.04.2011