Удерживает <и> достаточное количество, чтобы блокировать атаки XSS?

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

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

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

Ответ 1

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

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

Ответ 3

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

Пример 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 способы предотвращения этих атак.

Ответ 4

Нет, этого недостаточно. Помните, что 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.