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:

  1. Połączenie z bazą danych:
  2. 
    $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.

  3. Przygotowanie zapytania SQL:
  4. 
    $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.

  5. Wykonanie zapytania z parametrem:
  6. 
    $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.

  7. Pobranie wyników:
  8. 
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    				

    Pobieramy wyniki zapytania w postaci tablicy asocjacyjnej.

  9. Obsługa wyników:
  10. 
    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.

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *