it-swarm.com.de

Verhindern Sie die SQL-Injection

Eines der Sicherheitsprinzipien besteht darin, Zeichenfolgen und Variablen zu bereinigen, die vom Client an den Server übergeben werden. SQL Injection ist eine der Möglichkeiten, eine Website zu hacken. in plain PHP gibt es einige Funktionen, um die SQL-Injection zu verhindern:

Was ist die Strategie Drupal 8 zur Verhinderung der SQL-Injection? Wie kann ich die Clientdaten in meinem Controller bereinigen, um meine Site vor der SQL-Injection zu schützen?

5
Yusef

Drupal 8 (wie Drupal 7) verwendet PDO , um mit Datenbanken zu kommunizieren.

Bei PDO verwendet die DB-API vorbereitete Anweisungen , um insbesondere SQL-Injection-Angriffe zu vermeiden.

In der Praxis bedeutet dies, dass Sie die Datenbank-API-Methoden verwenden sollten. Wenn Sie die Methoden select, update, delete direkt verwenden, haben Sie eine bessere Chance, die SQL-Injection zu vermeiden, da alles parametrisiert wird.

Wenn Sie query verwenden, müssen Sie vorsichtiger sein, da die API Sie nur so sehr schützen kann. Wenn Sie dies beispielsweise tun:

$sql = "SELECT uid FROM users WHERE name = '$_GET[name]'";
\Drupal::database->query($sql);

Dann hast du verdient, was du bekommst :) Du solltest stattdessen immer folgendes verwenden:

$sql = "SELECT uid FROM users WHERE name = :name";
\Drupal::database->query($sql, [':name' => $_GET['name']]);

Nebenbei: In Wirklichkeit werden nur die beiden Funktionen, die Sie erwähnt haben, heutzutage in sehr altem, praktisch veraltetem Code verwendet. Die MySQL-Erweiterung wurde jetzt entfernt, und stripslashes wurde traditionell mit magischen Anführungszeichen verwendet, die in PHP 5.3. Veraltet sind. SQL-Injection ist immer noch ein großes Problem, aber diese 2 Vielleicht sind sie heutzutage nicht die besten zum Vergleich.

15
Clive