Профилактика XSS. Обработка <script достаточно?

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

<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">.


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

Ответ 3

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

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

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

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

Ответ 4

myspace был взломан из-за выражений css. Черный список не будет работать, "Белый список" - единственный путь.

Ответ 5

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

Ответ 6

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

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