Reichen PDO Prepared Statements für den Schutz vor SQL-Injection aus?
Hallo zusammen! Ich bin ein PHP-Anfänger und versuche, die Sicherheit bei der Arbeit mit Datenbanken zu verstehen. Ich habe viele Artikel gelesen, in denen behauptet wird, dass PDO und prepared statements die Silberkugel gegen SQL-Injection sind. Aber einige Punkte verwirren mich.
Hier ist ein Beispiel meines Codes:
```php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute([':username' => $_GET['username']]);
$user = $stmt->fetch();
```
Ich denke, das ist sicher, da ich Platzhalter verwende. Aber dann habe ich diesen Code in einem alten Projekt gesehen:
```php
$pdo->query("SELECT * FROM users WHERE id = " . $_GET['id']);
```
Und ich habe mich gefragt: Was ist, wenn ich versehentlich an einer Stelle vergesse, prepared statements zu verwenden? Oder wenn ich PDO nutze, aber die Emulation von prepared statements falsch konfiguriere? Kann ein Angreifer den PDO-Schutz umgehen?
Ich habe auch von dynamischen Abfragen gehört