Zabezpieczenie formularza przed atakami SQL Injection
Założenie: Pokażemy, jak zabezpieczyć formularz przed atakami SQL Injection za pomocą przygotowanych zapytań (prepared statements).
Krok po kroku:
- Połączenie z bazą danych:
- Przygotowanie zapytania SQL:
- Wykonanie zapytania z parametrem:
- Pobranie wyników:
- Obsługa wyników:
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// ustawienie trybu wyjątków
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Połączenie nieudane: " . $e->getMessage();
}
Ten kod nawiązuje połączenie z bazą danych MySQL. Pamiętaj o zamianie placeholderów na swoje dane dostępowe.
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
Tworzymy przygotowane zapytanie SQL. Znak zapytania (?) jest placeholderem dla wartości, którą dodamy później. Unikamy w ten sposób bezpośredniego wstawiania danych użytkownika do zapytania.
$username = $_POST["username"]; // Pobieramy nazwę użytkownika z formularza
$stmt->execute([$username]);
Wykonujemy przygotowane zapytanie, przekazując wartość `$username` jako parametr. PDO automatycznie zabezpiecza przed SQL Injection.
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
Pobieramy wyniki zapytania w postaci tablicy asocjacyjnej.
if (count($result) > 0) {
echo "Użytkownik znaleziony!";
} else {
echo "Użytkownik nie znaleziony.";
}
Sprawdzamy, czy znaleziono użytkownika i wyświetlamy odpowiedni komunikat.
Pamiętaj o zamknięciu połączenia z bazą danych po zakończeniu pracy: `$conn = null;`
Ten przykład pokazuje podstawowe zasady zabezpieczania formularzy przed atakami SQL Injection. Zachęcamy do dalszego zgłębiania tematu i zapoznania się z innymi metodami zabezpieczania aplikacji webowych.