Dino Geek, versucht dir zu helfen

Was ist SQL-Injection und wie kann man sie in PHP verhindern?


SQL-Injection ist eine häufige Angriffstechnik, bei der ein Angreifer Schadcode in SQL-Abfragen einfügt, um unautorisierte Aktionen auf der Datenbank auszuführen. Dies geschieht oft durch die Eingabefelder einer Webanwendung, in denen der Benutzer Daten eingeben kann, die dann in SQL-Abfragen verwendet werden. Ein Angreifer kann spezielle Zeichen und Befehle einfügen, um die ursprüngliche SQL-Abfrage zu manipulieren und beispielsweise Datenbanken zu durchsuchen, zu ändern oder zu löschen.

  1. Beispiele für SQL-Injection

1. Einfache SQL-Injection:

Angenommen, wir haben eine SQL-Abfrage zur Benutzeranmeldung: ```php $username = $_POST[‘username’]; $password = $_POST[‘password’]; $query = “SELECT * FROM users WHERE username = ‘$username’ AND password = ‘$password’”; ``` Wenn ein Angreifer das `username`-Feld mit `admin’ —` ausfüllt, wird die Abfrage zu: ```sql SELECT * FROM users WHERE username = ‘admin’ —’ AND password = ‘anything‘ ``` Das `—` kommentiert den Rest der Abfrage aus, wodurch die Passwortüberprüfung umgangen wird.

2. Union-based SQL-Injection:

Hierbei fügt der Angreifer `UNION`-Statements ein, um zusätzliche Abfragen auszuführen: ```php $id = $_GET[‘id’]; $query = “SELECT name, email FROM users WHERE id = $id”; ``` Wenn der Angreifer `$id` mit `1 UNION SELECT ‘hacker’, ‘hacker@attacker.com’` füllt, erhält er: ```sql SELECT name, email FROM users WHERE id = 1 UNION SELECT ‘hacker’, ‘hacker@attacker.com‘ ```

  1. Verhinderung von SQL-Injection in PHP

Um SQL-Injection zu verhindern, sollte man Parameter-binding und vorbereitete Anweisungen verwenden. Dies kann mit den PDO-Erweiterungen (PHP Data Objects) oder MySQLi in PHP erreicht werden.

  1. Verwendung von PDO:

```php
try { $pdo = new PDO; // Bereite die Anweisung vor $stmt = $pdo->prepare(‘SELECT * FROM users WHERE username = :username AND password = :password’); // Verbindet die Parameter $stmt->execute([‘username’ => $_POST[‘username’], ‘password’ => $_POST[‘password’]]); $user = $stmt->fetch(); if ($user) { echo ‘Login erfolgreich’; } else { echo ‘Login fehlgeschlagen’; }
} catch (PDOException $e) { echo ‘Datenbankfehler: ‘ . $e->getMessage();
}
```

  1. Verwendung von MySQLi:

```php
$mysqli = new mysqli(‘localhost’, ‘username’, ‘password’, ‘testdb’);

if ($mysqli->connect_error) { die(‘Verbindungsfehler (’ . $mysqli->connect_errno . ‘) ‘ . $mysqli->connect_error);
}

// Bereiten Sie die Anweisung vor
$stmt = $mysqli->prepare(‘SELECT * FROM users WHERE username = ? AND password = ?’);
$stmt->bind_param(‘ss’, $_POST[‘username’], $_POST[‘password’]);

// Führen Sie die Anweisung aus
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) { echo ‘Login erfolgreich’;
} else { echo ‘Login fehlgeschlagen’;
}

$stmt->close();
$mysqli->close();
```

  1. Quellen
    - OWASP. “SQL Injection.” OWASP. https://owasp.org/www-community/attacks/SQL_Injection.
    - PHP Documentation. “PDOPHP Data Objects.” PHP.net. https://www.php.net/manual/en/book.pdo.php.
    - PHP Documentation. “MySQLi.” PHP.net. https://www.php.net/manual/en/book.mysqli.php.

Durch die Verwendung dieser Techniken stellen wir sicher, dass Benutzereingaben korrekt gehandhabt werden und SQL-Injection-Angriffe verhindert werden.


Erstellen Sie einfach Artikel, um Ihr SEO zu optimieren
Erstellen Sie einfach Artikel, um Ihr SEO zu optimieren





DinoGeek bietet einfache Artikel über komplexe Technologien

Möchten Sie in diesem Artikel zitiert werden? Es ist ganz einfach, kontaktieren Sie uns unter dino@eiki.fr

CSS | NodeJS | DNS | DMARC | MAPI | NNTP | htaccess | PHP | HTTPS | Drupal | WEB3 | LLM | Wordpress | TLD | Domain | IMAP | TCP | NFT | MariaDB | FTP | Zigbee | NMAP | SNMP | SEO | E-Mail | LXC | HTTP | MangoDB | SFTP | RAG | SSH | HTML | ChatGPT API | OSPF | JavaScript | Docker | OpenVZ | ChatGPT | VPS | ZIMBRA | SPF | UDP | Joomla | IPV6 | BGP | Django | Reactjs | DKIM | VMWare | RSYNC | Python | TFTP | Webdav | FAAS | Apache | IPV4 | LDAP | POP3 | SMTP

| Whispers of love (API) | Déclaration d'Amour |






Rechtliche Hinweise / Allgemeine Nutzungsbedingungen