Zpět na domů

Zranitelnosti webových aplikací: XSS SQLi enumeration

Článek analyzuje tři běžné zranitelnosti webových aplikací: user enumeration, XSS a SQL-injekce. Jsou popsány mechanismy exploitace, rizika a praktické metody odstranění s příklady kódu. Doporučení pro pentest a sanitizaci.

XSS SQLi a enumeration: jak hackeři lámou webové aplikace
Advertisement 728x90

Top 3 chyby webových aplikací: od výčtu uživatelů až po SQL injekce

Výčet uživatelů (User Enumeration)

Tato zranitelnost vzniká, když server poskytuje různé odpovědi na dotazy s existujícími a neexistujícími přihlašovacími jmény. Hackeři analyzují odpovědi a provádějí zaměřené brute-force útoky s jistým úspěchem.

Příznaky zranitelnosti:

  • Různé textové zprávy: "Uživatel nenalezen" vs. "Špatné heslo".
  • Časové rozdíly: 50 ms pro registrovaného uživatele proti 2000 ms pro neexistujícího.

Po identifikaci platných přihlašovacích jmen útočník získává přístup k účtu a rozšiřuje oblast testování s vyššími oprávněními.

Google AdInline article slot

Meziwebový skriptování (XSS)

XSS umožňuje vkládat JavaScript do stránek, které zobrazují uživatelé. Prohlížeč spouští skript jako legitimní kód. Klasický reflected XSS je nejčastěji reprodukovatelný.

Následky:

  • Krádež cookies a relačních tokenů s odesláním na externí server.
  • Zachycení relace: provedení akcí v názoru oběti (změna hesla, transakce).
  • Phishing prostřednictvím podvržení uživatelského rozhraní.
  • Šíření malware prostřednictvím přesměrování.

SQL injekce

Útočník upravuje SQL dotazy prostřednictvím uživatelského vstupu. Příklad: zadání 'admin' -- obejde ověření hesla a ignoruje část dotazu za komentářem.

Google AdInline article slot

Typické dotazy jako SELECT * FROM users WHERE login='input' AND password='input' se stávají zranitelnými bez ochrany.

Rizika:

  • Dumps dat: přihlašovací jména, hesla, platební informace.
  • Úprava dat: změna zůstatků, přidání správců.
  • Smazání tabulek.
  • Eskalace na RCE prostřednictvím DBMS.

Metody odstranění

Pro výčet uživatelů jednotně formátujte odpovědi na všech fázích autentizace: přihlášení, registrace, obnova hesla. Zajistěte konstantní čas odezvy pomocí paddingu nebo limitování rychlosti.

Google AdInline article slot

XSS odstraňte sanitací na výstupu. Ekvivalejte:

  • V HTML: <&lt;, >&gt;.
  • V atribucích: "&quot;.
  • V JS: escape řetězců.

Použijte knihovny jako DOMPurify pro bezpečné HTML s povolením určitých tagů (tučné, kurzíva v komentářích).

SQL vyžaduje použití připravených příkazů nebo ORM. Příklad v PDO:

$stmt = $pdo->prepare("SELECT * FROM users WHERE login = ? AND password = ?");
$stmt->execute([$login, $password]);

Parametry jsou zpracovány ovladačem, což vylučuje provedení vstupu jako kódu. Pro dynamické dotazy použijte escape prostřednictvím mysqli_real_escape_string nebo ekvivalentu.

Co je důležité

  • Výčet uživatelů je nejčastější bezpečnostní mezera, detekovatelná podle času a zpráv.
  • XSS se řeší kódováním výstupu; ověření vstupu nestačí.
  • SQL injekce se řeší parametrizací; nikdy nekombinujte řetězce v dotazech.
  • Pravidelný pentest odhalí řetězce útoků: výčet → XSS → SQL injekce.

Pentest imituje reálné útoky a poskytuje detailní zprávu s PoC, riziky a opatřeními. Bez něj zůstávají systémy slepé vůči evolučním hrozbám.

— Editorial Team

Advertisement 728x90

Číst dál