Удерживает <и> достаточное количество, чтобы блокировать атаки XSS?
Я уверен, что ответ на этот вопрос - Нет, но я не могу найти способ, которым просто преобразование <
и >
в <
и >
не полностью блокирует отражение и постоянный XSS.
Я не говорю о CSRF.
Если это не блокирует XSS, можете ли вы представить пример того, как обойти эту защиту?
Ответы
Ответ 1
При использовании ненадежной строки в атрибуте (указанном с помощью "
) вам нужно выйти "
как "
.
В противном случае вы можете легко ввести javascript. Например, <a href="{{str}}">
с str
, например, " onmouseover='something-evil'"
.
Ответ 2
Не все атаки 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
Ответ 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.