it-swarm.com.de

ist db_insert sicher?

Ich verwende die Methode Drupal 7 db_insert, um Daten in eine benutzerdefinierte Tabelle in der Datenbank Drupal Datenbank) einzufügen Lesen Sie, dass dies der bevorzugte Weg ist. Ich bin jedoch durch Code und Dokument gegangen und kann nirgendwo sehen, wo die Werte analysiert werden, oder mir sagen, dass diese Werte sicher sind.

Einige der Werte stammen vom Benutzer, daher muss ich gegen SQL Injection-Angriffe prüfen.

Dies ist das Beispiel, das ich gelesen habe, in dem die 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();
?>
15
user5681

Die Drupal -Datenbankebene umschließt PDO und verwendet vorbereitete Anweisungen. Ja, die Einfügeanweisungen sind bereinigt und vor SQL geschützt Injektionsangriffe.

Dieses Zitat aus den Dokumenten Prepared Statements sagt 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 entkoppelten Eingaben erstellt werden, ist eine SQL-Injection weiterhin möglich).

Gleiches gilt für alle Datenbankfunktionen in Drupal 7 (db_select, db_delete Usw.). Die einzige, die möglicherweise noch unsicher ist, ist db_query(), die jede beliebige Zeichenfolge ausführt, die Sie an sie übergeben. Auch mit db_query() können Sie Parameter übergeben, damit Ihre Abfrage sicher ist.

Die Dokumente Datenbankabstraktionsschicht enthalten weitere Informationen.

13
Clive