#javascript #asp.net #xss
#javascript #asp.net #xss
Вопрос:
Я уверен, что ответ на этот вопрос отрицательный, но, похоже, я не могу найти способ, который простым преобразованием <
и >
в amp;<
и amp;>
не полностью блокирует отраженный и постоянный XSS.
Я не говорю о CSRF.
Если это не блокирует XSS, можете ли вы привести пример того, как обойти эту защиту?
Ответ №1:
Не все XSS-атаки вообще включают <или> , в зависимости от того, куда вставляются данные.
Комментарии:
1. Спасибо за ответ и ссылку!
Ответ №2:
При использовании ненадежной строки в атрибуте (заключенной в "
кавычки) вам необходимо экранировать "
как amp;quot
.
В противном случае вы могли бы легко внедрить javascript. Например, <a href="{{str}}">
с str
значением, например, " onmouseover='something-evil'"
.
Комментарии:
1. В последнем случае используйте кодировку URL, а не HTML-объекты; в этом случае
"
становится просто"
.2. Вы не можете просто закодировать в URL весь URL-адрес, поскольку это также нарушило бы строки запроса.
3. Ах, так побег «, <, и > заблокировал бы простой ответ. Ошибка записи (ввода), но если бы у меня был существующий блок скрипта или встроенные элементы DOM с прямым пользовательским вводом, где < и> не были необходимы для запуска ввода, я все равно был бы уязвим.
4. В этом примере требуется кодировка вывода HTML или, более конкретно, кодировка вывода атрибута HTML. Кодировка URL предназначена для строк, добавляемых к URL, таких как строки запроса, в противном случае ваш атрибут href будет выглядеть как «http://www». В подобном примере Encoder. HtmlAttributeEncode из библиотеки AntiXSS — это то, что вы действительно ищете.
Ответ №3:
Нет. Вот пара примеров, когда экранирования <
, >
, '
"
и amp;
недостаточно:
Пример 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 для способов предотвращения этих атак.
Комментарии:
1. @michaelsnowden В примерах я использовал синтаксис {{ }}, но любая библиотека шаблонов может быть уязвима для этих атак
Ответ №4:
Нет, этого недостаточно. Помните, что XSS — это не только ненадежные данные в HTML, вы также найдете их в JavaScript и CSS. Подумайте о такой ситуации, как «var myVar = [input];» С этим [входным] значением можно проделать множество вредоносных действий, не приближаясь к угловым скобкам. В XSS-шпаргалке есть еще много примеров:http://ha.ckers.org/xss.html
Вы упомянули ASP.NET в теге; то, на что вы хотите обратить внимание, это [AntiXSS library][1]
. Возьмите это и используйте соответствующую кодировку вывода:
Encoder.CssEncode()
Encoder.HtmlEncode()
Encoder.HtmlAttributeEncode()
Encoder.JavaScriptEncode()
и т.д. и т.п. Нет абсолютно никакой причины пытаться выполнить собственную замену символов в .NET.