O db_insert é seguro?

15

Estou usando o método Drupal 7 db_insert , para inserir dados em uma tabela personalizada no banco de dados Drupal. Eu li que essa é a maneira preferida, no entanto, percorri o código e o documento e não consigo ver em nenhum lugar que analise os valores ou me diga que esses valores são seguros.

Alguns dos valores são provenientes do usuário, por isso preciso verificar se há ataques de injeção de SQL.

Este é o exemplo que eu estava lendo, onde o Drupal 6 analisa os valores e a versão drupal 7 não.

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

fonte

Respostas:

13

A camada do banco de dados Drupal envolve a DOP e usa instruções preparadas; portanto, sim, as instruções de inserção são higienizadas e protegidas contra ataques de injeção de SQL.

Esta citação dos documentos de Declarações preparadas diz o melhor:

Os parâmetros para instruções preparadas não precisam ser citados; o driver lida com isso automaticamente. Se um aplicativo usar exclusivamente instruções preparadas, o desenvolvedor poderá ter certeza de que nenhuma injeção SQL ocorrerá (no entanto, se outras partes da consulta estiverem sendo construídas com entrada sem escape, a injeção SQL ainda será possível).

O mesmo é verdade para todas as funções da base de dados no Drupal 7 ( db_select, db_delete, etc.). O único que ainda é potencialmente inseguro é o db_query()que executará qualquer sequência arbitrária que você passar para ela. Mesmo com db_query(), no entanto, você pode passar parâmetros para que sua consulta seja segura.

Os documentos da camada de abstração do banco de dados têm mais informações.

Clive
fonte