У меня есть веб-приложения на PHP. Я НЕ хочу разрешать пользователям публиковать HTML на моем сайте.
Если я просто запущу strip_tags
() для всех данных перед сохранением в моей базе данных, будет strip_tags
() будет достаточно, чтобы предотвратить XSS?
Я спрашиваю, потому что это ' Мне непонятно прочесть документацию по strip_tags , если XSS запрещен. Кажется, есть какая-то ошибка в браузере, позволяющая
(да, ноль) в качестве допустимого HTML.
ОБНОВЛЕНИЕ
Я понимаю, что могу просто запустить htmlspecialchars
на всех выведенных данных; тем не менее, я думаю, что - поскольку я не хочу, прежде всего, разрешить HTML, проще (и с научной точки зрения лучше) очистить мои данные раз и навсегда, прежде чем сохранять их в своей базе данных, а затем каждый раз приходится беспокоиться Я вывожу данные, если данные безопасны или нет.
strip_tags
сам по себе не будет достаточным, так как он удаляет совершенно правильное содержимое, отличное от HTML. Например:
<?php
echo strip_tags("This could be a happy clown *<:) or a puckered face.\n");
....
echo strip_tags("Hey guys <--- look at this!\n");
Выведет:
This could be a happy clown *
И:
Hey guys
Все после начального <
удаляется. Очень раздражает конечных пользователей! Запрещение зарезервированных символов HTML было бы плохим шагом. И эти символы нужно будет экранировать с помощью htmlentities
или аналогичной функции при использовании в HTML.
Вам нужно что-то более продвинутое, чтобы strip_tags
— HTML Purifier отлично работали и позволяли пользователям использовать зарезервированные символы HTML.
Должен, я никогда раньше не слышал об этом 0 трюке. Но вы всегда можете использовать strip_tags
, а затем htmlspecialchars
, просто на всякий случай. Хорошей практикой было бы проверить это самостоятельно в своем приложении, поскольку вы знаете, какой тип данных вы можете попробовать, ввести и протестировать, и посмотреть, не сломается ли он. Просто найдите методы эксплойтов XSS и используйте их для своих тестовых данных. Я бы проверял, по крайней мере, еженедельно на наличие новых уязвимостей и постоянно тестировал бы ваш скрипт на наличие новых эксплойтов, которые появляются.
strip_tags()
может помочь, но не является пуленепробиваемым. Поскольку он не проверяет HTML, который он удаляет, какой-нибудь умный человек найдет HTML-конструкцию (искаженную или иную), которая удаляется, но все равно приводит к чему-то неприятному. Но на данный момент он должен обрабатывать почти все, что ему бросают. Только не думайте, что так будет всегда.
Кроме того, если вы разрешите прохождение любых тегов с помощью параметра «допустимые теги», это позволит пропустить любые атрибуты, специфичные для javascript, такие как onclick для этих конкретных тегов.