Можно ли провести XSS-атаку, если мой ввод не позволяет использовать символы ‹ и >?
Example: I enter <script>alert('this');</script> text
Но это если я удалю ‹ и > скрипт не будет текстовым:
I enter script alert('this'); script text
Можно ли провести XSS-атаку, если мой ввод не позволяет использовать символы ‹ и >?
Example: I enter <script>alert('this');</script> text
Но это если я удалю ‹ и > скрипт не будет текстовым:
I enter script alert('this'); script text
Да, это все еще может быть возможно.
например Скажем, ваш сайт вводит пользовательский ввод в следующее место
<img src="http://example.com/img.jpg" alt="USER-INPUT" />
Если USER-INPUT
равно " ONLOAD="alert('xss')
, это отобразит
<img src="http://example.com/img.jpg" alt="" ONLOAD="alert('xss')" />
Угловые скобки не нужны.
Кроме того, ознакомьтесь с экспериментальными правилами минимального кодирования OWASP XSS.
Для тела HTML:
Кодировать объект HTML ‹ &
укажите кодировку в метатеге, чтобы избежать UTF7 XSS
Для тела XHTML:
Кодировка объекта HTML ‹ & ›
ограничить ввод кодировкой http://www.w3.org/TR/2008/REC-xml-20081126/#charsets
Таким образом, в теле вы можете обойтись только кодированием (или удалением) подмножества символов, обычно рекомендуемых для предотвращения XSS. Однако вы не можете сделать это внутри атрибутов — полный XSS (межсайтовый скриптинг) ) Шпаргалка по профилактике рекомендует следующее, и у них нет минимальной альтернативы:
За исключением буквенно-цифровых символов, экранируйте все символы в формате HTML Entity
&#xHH;
, включая пробелы. (ЧЧ = шестнадцатеричное значение)
В основном это касается трех типов способов указания значения атрибута:
Кодирование таким образом предотвратит XSS в значениях атрибутов во всех трех случаях.
Также имейте в виду, что для атак UTF-7 не требуются символы угловых скобок. Однако, если кодировка явно не установлена в UTF-7, этот тип атаки невозможен в современных браузерах .
+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-
Также остерегайтесь атрибутов, которые разрешают URL-адреса, такие как href
, и гарантируют, что любой ввод пользователя является допустимым веб-URL. Настоятельно рекомендуется использовать надежную библиотеку для проверки URL-адреса с использованием подхода с использованием списка разрешений (например, если протокол не HTTPS, отклонить его). Попытка заблокировать такие последовательности, как javascript:
, недостаточна.
Если пользовательский ввод печатается внутри HTML-атрибута, вам также необходимо избегать кавычек, иначе вы будете уязвимы, например:
" onload="javascript-code" foobar="
Вы также должны избегать символа амперсанда, так как он обычно должен быть закодирован внутри документов HTML и в противном случае может разрушить ваш макет.
Поэтому вам следует позаботиться о следующих символах: ‹ > & ' "
Однако вы не должны полностью удалять их, а заменять их правильными HTML-кодами, т.е. '