Ataki CSRF, XSS, SQL Injection, DoS, DDoS, Web Scraping – opis i sposoby zapobiegania w PHP
Ataki CSRF (Cross-Site Request Forgery)
Opis:
CSRF to atak, w którym użytkownik jest oszukiwany, aby nieświadomie wysłać nieautoryzowane żądanie do serwera, na którym jest zalogowany.
Przykład ataku:
Jeśli użytkownik jest zalogowany na stronie banku, złośliwa witryna może wysłać żądanie, które wykonuje przelew na konto atakującego, używając ciasteczek uwierzytelniających ofiary.
Zapobieganie:
- Tokeny CSRF – Generowanie i weryfikacja unikalnych tokenów w formularzach.
- Nagłówki Referer/Origin – Weryfikacja źródła żądania.
Przykład w PHP:
// Generowanie tokenu CSRF
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
// W formularzu HTML
echo '<form method="POST" action="process.php">';
echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">';
echo '<input type="submit" value="Submit">';
echo '</form>';
//Weryfikacja tokenu w PHP
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
die('CSRF token mismatch!');
}
}
Ataki XSS (Cross-Site Scripting)
Opis:
XSS to wstrzykiwanie złośliwego kodu (np. JavaScript) w aplikacji, który jest następnie wykonywany w przeglądarce użytkownika.
Przykład ataku:
Podanie złośliwego skryptu w polu komentarza:
<script>alert('Twój komputer został zhakowany!');</script>
Zapobieganie:
- Filtrowanie i kodowanie danych wejściowych.
- Używanie funkcji
htmlspecialchars()
lub bibliotek takich jak HTMLPurifier.
Przykład w PHP:
// Zabezpieczenie przed XSS
$userInput = '<script>alert("XSS");</script>';
$safeOutput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
echo $safeOutput; // Wyświetli: <script>alert("XSS");</script>
Ataki SQL Injection
Opis:
Atakujący wstrzykuje kod SQL w celu manipulacji bazą danych, np. wycieku danych lub nieautoryzowanego dostępu.
Przykład ataku:
SELECT * FROM users WHERE username = 'admin' -- ' AND password = '';
Zapobieganie:
- Używanie zapytań parametryzowanych (Prepared Statements).
- Filtrowanie danych wejściowych.
Przykład w PHP:
// Przygotowane zapytanie
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password');
$stmt->execute([
':username' => $_POST['username'],
':password' => password_hash($_POST['password'], PASSWORD_BCRYPT)
]);
$user = $stmt->fetch();
if ($user) {
echo 'Zalogowano!';
} else {
echo 'Niepoprawne dane logowania!';
}
Ataki DoS (Denial of Service) i DDoS (Distributed Denial of Service)
Opis:
Atak DoS polega na przeciążeniu serwera ogromną ilością żądań, co powoduje jego niedostępność. Atak DDoS wykorzystuje rozproszone źródła, np. botnety.
Zapobieganie:
- Wdrażanie zapór sieciowych (WAF).
- Limitowanie szybkości żądań (Rate Limiting).
- Używanie usług ochrony DDoS (np. Cloudflare).
Przykład w PHP:
// Prosty limiter żądań w PHP
$ip = $_SERVER['REMOTE_ADDR'];
$rateLimitFile = 'rate_limit_' . md5($ip) . '.txt';
if (file_exists($rateLimitFile)) {
$lastRequest = file_get_contents($rateLimitFile);
if (time() - $lastRequest < 1) { // 1 sekunda między żądaniami
die('Zbyt wiele żądań. Spróbuj ponownie później.');
}
}
file_put_contents($rateLimitFile, time());
Web Scraping
Opis:
Web Scraping polega na zautomatyzowanym zbieraniu danych z witryny.
Zapobieganie:
- Ograniczanie dostępu za pomocą Captcha.
- Blokowanie znanych user-agentów botów.
- Monitorowanie aktywności użytkowników.
Przykład w PHP:
// Sprawdzanie User-Agent
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/bot|crawl|spider/i', $userAgent)) {
die('Boty nie są dozwolone!');
}
Podsumowanie
Zestawienie metod zapobiegania atakom:
Typ ataku | Metoda zapobiegania |
---|---|
CSRF | Tokeny CSRF, sprawdzanie nagłówków Referer/Origin |
XSS | Filtrowanie danych wejściowych, htmlspecialchars() |
SQL | Injection Zapytania parametryzowane, filtrowanie danych |
DoS/DDoS | Rate Limiting, WAF, usługi ochrony DDoS |
Web Scraping | Captcha, blokowanie botów, monitorowanie ruchu |
Wdrażanie tych technik w aplikacjach internetowych znacząco podnosi poziom bezpieczeństwa i minimalizuje ryzyko ataków. Pamiętaj, że bezpieczeństwo to proces, który wymaga stałego monitorowania i aktualizacji praktyk.