db_insert è sicuro?


15

Sto usando il metodo Drupal 7 db_insert , per inserire i dati in una tabella personalizzata nel database Drupal. Ho letto che questo è il modo preferito, tuttavia ho esaminato il codice e il doco e non riesco a vedere da nessuna parte che analizza i valori o mi dice che questi valori sono sicuri.

Alcuni dei valori provengono dall'utente, quindi devo verificare gli attacchi SQL Injection.

Questo è l'esempio che stavo leggendo, in cui Drupal 6 analizza i valori e la versione drupal 7 no.

<?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();
?>

Risposte:


13

Il livello del database Drupal si avvolge attorno a DOP e utilizza istruzioni preparate, quindi sì, le istruzioni insert sono igienizzate e protette dagli attacchi di iniezione SQL.

Questa citazione dai documenti delle dichiarazioni preparate lo dice meglio:

I parametri per le istruzioni preparate non devono essere citati; il driver lo gestisce automaticamente. Se un'applicazione utilizza esclusivamente istruzioni preparate, lo sviluppatore può essere sicuro che non si verificherà alcuna iniezione SQL (tuttavia, se altre parti della query vengono create con input senza caratteri di escape, l'iniezione SQL è ancora possibile).

Lo stesso vale per tutte le funzioni di database in Drupal 7 ( db_select, db_delete, ecc). L'unico che è ancora potenzialmente insicuro è db_query()che eseguirà qualsiasi stringa arbitraria che gli passi. Anche con db_query(), tuttavia, è possibile passare parametri in modo che la query sia sicura.

I documenti del livello di astrazione del database contengono alcune informazioni in più.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.