Wprowadzenie do SQL Injection
Założenie: Przedstawimy prosty przykład podatności na SQL Injection i pokażemy, jak jej uniknąć, używając przygotowanych zapytań.
Krok po kroku:
- Niebezpieczny przykład: Bezpośrednie wstawianie danych użytkownika do zapytania SQL.
- Bezpieczny przykład: Użycie przygotowanych zapytań (prepared statements).
$username = $_GET['username'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($conn, $query);
// ... dalsza obróbka wyników ...
Ten kod jest podatny na SQL Injection. Zły aktor może wpisać np. username='; DROP TABLE users; --
, co spowoduje usunięcie całej tabeli users
.
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username); // "s" oznacza string
$username = $_GET['username'];
$stmt->execute();
$result = $stmt->get_result();
// ... dalsza obróbka wyników ...
Przygotowane zapytania chronią przed SQL Injection, ponieważ dane użytkownika są traktowane jako wartości, a nie jako część kodu SQL.
Ten przykład pokazuje podstawy SQL Injection i jak łatwo można się przed nim zabezpieczyć. Zachęcamy do dalszego zgłębiania tematu bezpieczeństwa aplikacji webowych!