Достаточно ли экранирования <и> для блокировки XSS-атак? - PullRequest
13 голосов
/ 18 апреля 2011

Я уверен, что ответ на этот вопрос - Нет, но я не могу найти способ, которым простое преобразование < и > в &lt; и &gt; не полностью блокирует отражениеи постоянный XSS.

Я не говорю о CSRF.

Если это не блокирует XSS, можете ли вы привести пример, как обойти эту защиту?

Ответы [ 4 ]

10 голосов
/ 18 апреля 2011

Не все атаки XSS включают <или> вообще, в зависимости от того, куда вставляются данные.

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Why_Can.27t_I_Just_HTML_Entity_Encode_Untrusted_Data.3F

7 голосов
/ 18 апреля 2011

При использовании ненадежной строки в атрибуте (в кавычках ") вы должны экранировать " как &quot.

В противном случае вы можете легко внедрить JavaScript.Например, <a href="{{str}}"> с str, например, " onmouseover='something-evil'".

5 голосов
/ 13 августа 2013

Нет.Вот несколько примеров, когда недостаточно экранирования <, >, ', " и &:

Пример 1:

<a href="{{myUrl}}">

XSS-атака:

myUrl = "javascript:alert(1)"

Пример 2:

<script>var page = {{myVar}};</script>

XSS-атака:

myVar = "1;alert(1)"

См. https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet о способах предотвращения этих атак.

3 голосов
/ 23 апреля 2011

Нет, этого недостаточно.Помните, что XSS - это не только ненадежные данные в HTML, вы также найдете их в JavaScript и CSS.Подумайте о такой ситуации, как "var myVar = [input];"С этим значением [input] вы можете совершать всевозможные вредоносные действия, не приближаясь к угловым скобкам.В шпаргалке XSS есть еще много примеров: http://ha.ckers.org/xss.html

Вы упомянули ASP.NET в теге;то, на что вы хотите смотреть - это [AntiXSS library][1].Возьмите это и используйте соответствующую выходную кодировку:

Encoder.CssEncode()
Encoder.HtmlEncode()
Encoder.HtmlAttributeEncode()
Encoder.JavaScriptEncode()

и т. Д.и т. д. Абсолютно нет причин пытаться выполнять собственную замену символов в .NET.

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