Przejdź do głównej zawartości

XSS i CSRF - różnicę, przykłady, obrona

Co przekazesz słuchaczom?

Po tej prezentacji słuchacze będą w stanie:

  • Rozroznic ataki XSS i CSRF pod wzgledem mechanizmu działania
  • Zidentyfikowac miejsca podatne na oba typy atakow
  • Zastosowac podstawowe techniki obrony w swoich projektach
  • Zrozumiec, dlaczego te ataki sa wciaz popularne i niebezpieczne
  1. Wprowadzenie (2 min)

    • Krótkie przedstawienie tematu
    • Dlaczego XSS i CSRF sa ważne w bezpieczenstwie webowym
    • Statystyki OWASP Top 10
  2. XSS - Cross-Site Scripting (3 min)

    • Definicja i mechanizm działania
    • Typy XSS: stored, reflected, DOM-based
    • Przykład ataku i jego skutki
  3. CSRF - Cross-Site Request Forgery (3 min)

    • Definicja i mechanizm działania
    • Różnica miedzy XSS a CSRF
    • Przykład ataku i jego skutki
  4. Techniki obrony (3 min)

    • Obrona przed XSS: sanityzacja, encoding, CSP
    • Obrona przed CSRF: tokeny, SameSite cookies
    • Dobre praktyki w kodzie
  5. Podsumowanie i pytania (1 min)

    • Kluczowe wnioski
    • Checklista bezpieczeństwa

XSS to atak polegajacy na wstrzyknieciu złośliwego skryptu JavaScript do strony internetowej, który nastepnie wykonuje się w przegladarce ofiary.

Główny problem: Niezaufane dane użytkownika sa renderowane bez odpowiedniego przetworzenia (encoding/escaping).

CSRF to atak zmuszajacy zalogowanego użytkownika do wykonania niechcianej akcji na stronie, na której jest uwierzytelniony.

Główny problem: Serwer ufa sesji użytkownika bez weryfikacji, czy zadanie pochodzi z legalnego źródła.

AspektXSSCSRF
Co jest atakowaneZaufanie użytkownika do stronyZaufanie serwera do sesji
Gdzie jest problemOutput (renderowanie)Request (autoryzacja)
Skrypt złośliwyWykonuje się w przegladarceNie wymaga skryptu
Cel atakuKradziez danych, sesjiWykonanie akcji
[Użytkownik] --> [Formularz komentarza] --> [Baza danych]
|
v
[Ofiara] <-- [Strona że skryptem] <-- [Serwer]
[Użytkownik zalogowany do banku]
|
v
[Odwiedza złośliwa strone] --> [POST do banku]
|
v
[Bank wykonuje przelew]
+------------------+------------------+
| XSS | CSRF |
+------------------+------------------+
| htmlspecialchars | Token CSRF |
| Content-Security | SameSite cookies |
| Policy (CSP) | Referer check |
| Trusted Types | Custom headers |
+------------------+------------------+
<!-- ZLE - podatne na XSS -->
<?php
$name = $_GET['name'];
echo "Witaj, " . $name;
?>
<!-- Atak: ?name=<script>alert('XSS')</script> -->
<!-- DOBRZE - zabezpieczone -->
<?php
$name = $_GET['name'];
echo "Witaj, " . htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
?>
<!-- ZLE - brak tokena CSRF -->
<form action="/delete-account" method="POST">
<button type="submit">Usun konto</button>
</form>
<!-- DOBRZE - z tokenem CSRF -->
<?php
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;
?>
<form action="/delete-account" method="POST">
<input type="hidden" name="csrf_token" value="<?= $token ?>">
<button type="submit">Usun konto</button>
</form>
<?php
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('Nieprawidłowy token CSRF');
}
// Kontynuuj przetwarzanie...
?>

Wymagania minimalne:

  • Wyjaśnienie różnic miedzy XSS a CSRF
  • Pokazanie 2 schematow (po jednym na atak)
  • Pokazanie 1 fragmentu kodu obronnego (np. htmlspecialchars)
  • Podanie 2 przykładów miejsc podatnych
Ocena: 3.0 (minimum)

Co sprawdzić przed wdrozeniem?

  1. Czy wszystkie dane użytkownika sa encodowane przed wyswietleniem?
  2. Czy formularze POST maja tokeny CSRF?
  3. Czy cookies sesji maja flage SameSite?
  4. Czy Content-Security-Policy jest skonfigurowane?
  5. Czy uzywamy httpOnly dla cookies sesji?
  6. Czy walidujemy dane po stronie serwera?
  7. Czy uzywamy prepared statements dla SQL?

Pytanie 1

Dlaczego XSS jest wciaz w OWASP Top 10 mimo prostych metod obrony?

Pytanie 2

Czy SameSite cookies całkowicie eliminuja ryzyko CSRF?

Pytanie 3

Jak CSP pomaga w obronie przed XSS?

Pytanie 4

Czy API REST jest podatne na CSRF? Dlaczego?