XSS профилактика. Обработка <скрипт достаточно? - PullRequest
14 голосов
/ 03 декабря 2010

Мне было интересно, достаточно ли проверки и удаления "<script" из полей ввода текста, чтобы прекратить атаки внедрения кода javascript?

Ответы [ 6 ]

18 голосов
/ 03 декабря 2010

Нет, блокировки отдельных дел недостаточно - рано или поздно кто-то придумает надуманный случай, о котором вы не задумывались.

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

9 голосов
/ 03 декабря 2010

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

Он содержал поле выбора, с помощью которого вы могли выбрать цвет текста:

<select name="color">
    <option value="red">Red</option>
    <option value="green">Green</option>
    <option value="blue">Blue</option>
</select>

Значение было использовано без фильтра на странице поздравительной открытки.Таким образом, легко подделать отправленные данные POST и изменить

color=red

на что-то вроде

color=red%22+onload%3D%22alert(%27foo%27)

, что приведет к

<font color="red" onload="alert('foo')">

вместо <font color="red">.


Таким образом, точка никогда не доверяет никаким вводам пользователя, даже предопределенным значениям, которые вы определяете.

4 голосов
/ 03 декабря 2010

К сожалению, нет, существует множество доступных атак, например, выполнение JavaScript через элемент <img>. Я рекомендую использовать библиотеку XSS для любой платформы на стороне сервера.

Вот пример того, что я имею в виду:

<img src="javascript:alert('hi');">
<input type="image" src="javascript:alert('hi');">

... не эти примеры сами по себе безвредны, но вы видите, как существуют другие способы выполнения JavaScript. Какие эксплойты работают, зависит от браузера, но имейте в виду, что есть и другие методы.

2 голосов
/ 03 декабря 2010

MySpace был взломан из-за выражений CSS.Черный список не будет работать, белый список - единственный маршрут.

1 голос
/ 12 декабря 2010

<s<scriptcript после одного удаления становится <script.

Если вы заблокируете это, есть много других.Гораздо проще и правильнее экранировать (не удалять) все вхождения <, " и &.

1 голос
/ 03 декабря 2010

В дополнение к тем, что упоминал Ник, вы также должны следить за событиями JavaScript, такими как: "onload", "onclick", ...

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