¿es seguro db_insert?

15

Estoy usando el método Drupal 7 db_insert , para insertar datos en una tabla personalizada en la base de datos de Drupal. He leído que esta es la forma preferida, sin embargo, he recorrido el código y el doco y no puedo ver ningún lugar que analice los valores o me diga que estos valores son seguros.

Algunos de los valores provienen del usuario, por lo que debo verificar los ataques de inyección SQL.

Este es el ejemplo que estaba leyendo, donde Drupal 6 analiza los valores y la versión de 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();
?>

fuente

Respuestas:

13

La capa de base de datos de Drupal se envuelve alrededor de PDO y utiliza declaraciones preparadas, por lo que sí, las instrucciones de inserción están desinfectadas y protegidas de ataques de inyección SQL.

Esta cita de los documentos de declaraciones preparadas lo dice mejor:

No es necesario citar los parámetros para las declaraciones preparadas; el conductor maneja esto automáticamente. Si una aplicación usa exclusivamente declaraciones preparadas, el desarrollador puede estar seguro de que no se producirá una inyección de SQL (sin embargo, si otras partes de la consulta se están construyendo con una entrada sin escape, la inyección de SQL aún es posible).

Lo mismo es cierto para todas las funciones de base de datos en Drupal 7 ( db_select, db_delete, etc.). El único que aún es potencialmente inseguro es el db_query()que ejecutará cualquier cadena arbitraria que le pase. Incluso con db_query(), sin embargo, puede pasar parámetros para que su consulta sea segura.

Los documentos de la capa de abstracción de la base de datos tienen más información.

Clive
fuente