ist db_insert sicher?

15

Ich verwende die Drupal 7-Methode db_insert , um Daten in eine benutzerdefinierte Tabelle in der Drupal-Datenbank einzufügen. Ich habe gelesen, dass dies der bevorzugte Weg ist, aber ich habe den Code und das Dokument durchgegangen und kann nirgendwo sehen, wo die Werte analysiert werden oder ob diese Werte sicher sind.

Einige der Werte stammen vom Benutzer, daher muss ich nach SQL Injection-Angriffen suchen.

Dies ist das Beispiel, das ich gelesen habe, in dem der Drupal 6 die Werte analysiert und die Drupal 7-Version nicht.

<?php
// Drupal 6 version
db_query('INSERT INTO {vchess_games} 
   (gid, timestamps, white, black, state, board_white, board_black) ' . "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')", 
   $gid, $timestamps, $game['white'], $game['black'], $state, $board_white, $board_black);

// Drupal 7 version
db_insert('vchess_games')
  ->fields(array(
    'gid' => $gid,
    'timestamps' => $timestamps,
    'white' => $game['white'],
    'black' => $game['black'],
    'state' => $state,
    'board_white' => $board_white,
    'board_black' => $board_black
  ))
  ->execute();
?>

quelle

Antworten:

13

Die Drupal-Datenbankschicht umschließt PDO und verwendet vorbereitete Anweisungen. Ja, die insert-Anweisungen sind bereinigt und vor SQL-Injection-Angriffen geschützt.

In diesem Zitat aus den vorbereiteten Anweisungen heißt es am besten:

Die Parameter für vorbereitete Anweisungen müssen nicht in Anführungszeichen gesetzt werden. Der Fahrer übernimmt dies automatisch. Wenn eine Anwendung ausschließlich vorbereitete Anweisungen verwendet, kann der Entwickler sicher sein, dass keine SQL-Injection erfolgt (wenn jedoch andere Teile der Abfrage mit nicht entkappten Eingaben erstellt werden, ist eine SQL-Injection weiterhin möglich).

Das gleiche gilt für alle Datenbank - Funktionen in Drupal 7 ( db_select, db_deleteusw.). Das Einzige, das noch immer unsicher ist db_query(), ist das Ausführen einer beliebigen Zeichenfolge, die Sie an sie übergeben. Trotzdem db_query()können Sie Parameter übergeben, damit Ihre Abfrage sicher ist.

Die Dokumente der Datenbankabstraktionsschicht enthalten weitere Informationen.

Clive
quelle