Запрет XSS с помощью strip_tags ()?

У меня есть веб-приложения на PHP. Я НЕ хочу разрешать пользователям публиковать HTML на моем сайте.

Если я просто запущу strip_tags () для всех данных перед сохранением в моей базе данных, будет strip_tags () будет достаточно, чтобы предотвратить XSS?

Я спрашиваю, потому что это ' Мне непонятно прочесть документацию по strip_tags , если XSS запрещен. Кажется, есть какая-то ошибка в браузере, позволяющая (да, ноль) в качестве допустимого HTML.

ОБНОВЛЕНИЕ

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

12
задан jww 23 September 2014 в 23:18
поделиться

3 ответа

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_tagsHTML Purifier отлично работали и позволяли пользователям использовать зарезервированные символы HTML.

12
ответ дан 2 December 2019 в 03:43
поделиться

Должен, я никогда раньше не слышал об этом 0 трюке. Но вы всегда можете использовать strip_tags, а затем htmlspecialchars, просто на всякий случай. Хорошей практикой было бы проверить это самостоятельно в своем приложении, поскольку вы знаете, какой тип данных вы можете попробовать, ввести и протестировать, и посмотреть, не сломается ли он. Просто найдите методы эксплойтов XSS и используйте их для своих тестовых данных. Я бы проверял, по крайней мере, еженедельно на наличие новых уязвимостей и постоянно тестировал бы ваш скрипт на наличие новых эксплойтов, которые появляются.

3
ответ дан 2 December 2019 в 03:43
поделиться

strip_tags() может помочь, но не является пуленепробиваемым. Поскольку он не проверяет HTML, который он удаляет, какой-нибудь умный человек найдет HTML-конструкцию (искаженную или иную), которая удаляется, но все равно приводит к чему-то неприятному. Но на данный момент он должен обрабатывать почти все, что ему бросают. Только не думайте, что так будет всегда.

Кроме того, если вы разрешите прохождение любых тегов с помощью параметра «допустимые теги», это позволит пропустить любые атрибуты, специфичные для javascript, такие как onclick для этих конкретных тегов.

1
ответ дан 2 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: