В XSS на основе DOM ответ HTTP с сервера никогда не изменяется, но код на стороне клиента, содержащийся на странице, выполняется по-разному из-за вредоносных изменений, которые произошли в среде DOM. Вот пример XSS на основе DOM (взято из OWASP's website):
Предположим, что следующий код используется для создания формы, позволяющей пользователю выбрать его/ее предпочтительный язык. В строке запроса также указывается язык по умолчанию, как параметр «default».
Select your language:
<select><script>
document.write("<OPTION value=1>"+document.location.href.substring(document.location.href.indexOf("default=")+8)+"</OPTION>");
document.write("<OPTION value=2>English</OPTION>");
</script></select>
страница вызывается с URL, например:
http://www.some.site/page.html?default=French
DOM Based XSS нападение на этой странице может быть достигнуто путем отправки следующий URL в жертву:
http://www.some.site/page.html?default=<script>alert(document.cookie)</script>
Веб-страница на странице (после обработки начального javascript с помощью document.write
) будет выглядеть так:
Select your language:
<select>
<OPTION value=1><script>alert(document.cookie)</script></OPTION>
<OPTION value=2>English</OPTION>
</select>
БОНУС: Self-XSS
Facebook придумали fancy name для XSS жульничества, где мошенники обманным путем заставить пользователей копирования и вставки вредоносного контента в веб-консоли для разработчиков своих браузеров.
Как предотвратить такие атаки, если сам URL-адрес изменен, есть ли что-либо в руках жертвы, чтобы предотвратить такие атаки проактивно. –