OWASP (Open Web Application Security Project) to organizacja non-profit która co kilka lat publikuje listę 10 najgroźniejszych podatności aplikacji webowych. OWASP Top 10 jest standardem referencyjnym w audytach bezpieczeństwa na całym świecie - i punktem wyjścia dla atakujących szukających łatwych celów. Wirtualna Tarcza sprawdza wszystkie kategorie OWASP automatycznie, bez instalacji i bez dewelopera.
Co to jest OWASP Top 10 i dlaczego ma znaczenie?
OWASP Top 10 to nie akademicka lista - to rankingowanie rzeczywistych ataków na podstawie danych z tysięcy audytów bezpieczeństwa. Każda pozycja na liście oznacza że ten typ ataku jest aktywnie wykorzystywany przez hakerów. Polska nie jest wyjątkiem - aplikacje webowe to jeden z najczęstszych wektorów ataku na małe i średnie firmy.
- A01 - Broken Access Control (utrata kontroli dostępu)
- A02 - Cryptographic Failures (błędy kryptograficzne)
- A03 - Injection (wstrzykiwanie kodu - SQL, LDAP, NoSQL)
- A04 - Insecure Design (niebezpieczny projekt)
- A05 - Security Misconfiguration (błędna konfiguracja)
- A06 - Vulnerable and Outdated Components (przestarzałe komponenty)
- A07 - Identification and Authentication Failures
- A08 - Software and Data Integrity Failures
- A09 - Security Logging and Monitoring Failures
- A10 - Server-Side Request Forgery (SSRF)
Co konkretnie sprawdza nasz skaner OWASP?
Zamiast teoretycznych opisów - to co realnie testujemy przy każdym skanie. Każdy z poniższych testów jest wykonywany automatycznie na podanym adresie URL i generuje konkretny wynik (znaleziono / nie znaleziono) z instrukcją naprawy.
Test 1: HTTP TRACE - metoda która nie powinna istnieć
HTTP TRACE to metoda debugowania która odsyła serwerowi dokładną kopię wysłanego żądania. Problem: zawiera nagłówki HTTP, w tym nagłówki autoryzacji i ciasteczka sesji. Ataki Cross-Site Tracing (XST) wykorzystują TRACE do kradzieży sesji nawet gdy flaga HttpOnly jest ustawiona na cookies.
Wskazówka - Nginx: Dodaj 'if ($request_method = TRACE) { return 405; }' w bloku server{}. Apache: Dodaj 'TraceEnable off' w httpd.conf. W Next.js na Node.js - metoda TRACE jest domyślnie blokowana przez HTTP moduł Node.
Jak sprawdzić ręcznie: curl -X TRACE https://twojastrona.pl -I Bezpieczna odpowiedź (TRACE wyłączony): HTTP/2 405 Method Not Allowed Niebezpieczna odpowiedź: HTTP/2 200 OK Content-Type: message/http (Serwer odsyła całe żądanie - włącznie z nagłówkami sesji)
Test 2: Open Redirect - przekierowania bez walidacji
Open redirect to luka gdzie aplikacja przekierowuje użytkownika na zewnętrzny URL przekazany w parametrze query string bez walidacji. Atakujący tworzy link 'twojastrona.pl/redirect?url=evil.com' - ofiara widzi zaufaną domenę, klika i trafia na stronę phishingową.
Podatny kod:
// /api/redirect?next=https://evil.com
export function GET(req: Request) {
const url = new URL(req.url);
const next = url.searchParams.get('next');
return Response.redirect(next!); // ❌ brak walidacji
}
Bezpieczny kod:
export function GET(req: Request) {
const url = new URL(req.url);
const next = url.searchParams.get('next');
// Zezwalaj tylko na ścieżki wewnętrzne
if (!next?.startsWith('/')) {
return Response.redirect('/');
}
return Response.redirect(new URL(next, req.url).toString());
}Test 3: Directory Listing - przeglądanie plików serwera
Directory listing oznacza że serwer wyświetla listę plików w katalogu gdy nie ma pliku index.html. Atakujący widzi strukturę katalogów, pliki konfiguracyjne, kopie zapasowe i inne zasoby które nie powinny być publiczne. To błąd konfiguracji serwera (OWASP A05 - Security Misconfiguration).
Wskazówka - Nginx: Upewnij się że 'autoindex off' jest w konfiguracji (to default). Apache: Usuń 'Options +Indexes' z .htaccess lub httpd.conf. Sprawdź URL /images/, /uploads/, /backup/ na swojej stronie - jeśli widzisz listę plików to masz problem.
Test 4: phpinfo() - ekspozycja konfiguracji serwera
phpinfo() to funkcja PHP która wyświetla pełną konfigurację środowiska: wersję PHP, zainstalowane moduły, zmienne środowiskowe (w tym klucze API!), ścieżki systemowe i konfigurację php.ini. Wiele serwisów pozostawia phpinfo.php lub info.php publicznie dostępny po testach.
Skaner sprawdza: /phpinfo.php /info.php /php-info.php /test.php /debug.php Co atakujący widzi w phpinfo(): - Pełna ścieżka do plików: /var/www/html/... - Zmienne $_ENV: DATABASE_URL, API_KEY, SECRET_KEY - Wersja PHP (celowanie w znane CVE) - Konfiguracja opcji bezpieczeństwa PHP
Test 5: Przestarzałe biblioteki JavaScript
OWASP A06 - Vulnerable and Outdated Components dotyczy szczególnie frontendu. Skaner analizuje bundle JavaScript strony i wykrywa znane podatne wersje popularnych bibliotek.
- jQuery < 3.5.0 - podatne na XSS przez .html(), .load(), $.parseHTML()
- Bootstrap < 4.6.2 - podatne na XSS przez data-bs-content (tooltip)
- Lodash < 4.17.21 - prototype pollution, ReDoS
- Handlebars < 4.7.7 - Remote Code Execution przez skompilowane szablony
- moment.js (dowolna wersja) - uznana za deprecated, zastąp przez date-fns lub dayjs
- Angular < 12 - LTS zakończone, brak aktualizacji bezpieczeństwa
Wskazówka - Narzędzia do sprawdzenia: RetireJS (npm lub rozszerzenie Chrome), Snyk, npm audit. W Next.js: 'npm audit' w katalogu projektu pokaże wszystkie CVE w zależnościach. Wirtualna Tarcza sprawdza bundle produkcyjny - to co faktycznie trafia do użytkownika.
Test 6: Path Traversal - wychodzenie poza katalog
Path traversal (directory traversal) to atak gdzie parametr URL zawiera sekwencje '../' które powodują że serwer odczytuje pliki spoza dozwolonego katalogu. Klasyczny przykład: /download?file=../../../../etc/passwd pozwala odczytać plik użytkowników systemu Linux.
Skaner testuje wzorce:
/download?file=../../../etc/passwd
/read?path=..%2F..%2Fetc%2Fshadow
/?page=../../../../windows/win.ini
Ochrona w Next.js:
// Zawsze waliduj że ścieżka pozostaje w dozwolonym katalogu:
import path from 'path';
const safeBase = path.resolve('./public/downloads');
const requestedPath = path.resolve(safeBase, filename);
if (!requestedPath.startsWith(safeBase)) {
return Response.json({ error: 'Forbidden' }, { status: 403 });
}Test 7: Autocomplete haseł - drobny szczegół, realna konsekwencja
Przeglądarki oferują autocomplete dla formularzy logowania - to wygodne dla użytkowników ale problem na współdzielonych komputerach i kioskach. Formularze z polami hasła powinny mieć autocomplete='current-password' (lub 'off' dla wrażliwych aplikacji). Brak tego atrybutu to OWASP A07 - Authentication Failures.
<!-- Zalecane: --> <input type="password" autocomplete="current-password" /> <!-- Dla formularzy zmiany hasła: --> <input type="password" autocomplete="new-password" /> <!-- Na kioskach i urządzeniach publicznych: --> <input type="password" autocomplete="off" />
Jak uruchomić skan OWASP na swojej stronie?
Wirtualna Tarcza wykonuje wszystkie powyższe testy automatycznie w ramach pełnego skanu 10 modułów. Wynik zawiera konkretne znaleziska z opisem ryzyka, dowodem (request/response) i Fix Promptem gotowym do skopiowania do Cursor, Lovable, Bolt lub ChatGPT. Skan trwa do 5 minut.