db_insert безопасно?


15

Я использую Drupal 7 метод db_insert , чтобы вставить данные в пользовательскую таблицу в базе данных Drupal. Я читал, что это предпочтительный способ, однако я прошелся по коду и документу и не вижу нигде, который анализирует значения или говорит мне, что эти значения безопасны.

Некоторые значения поступают от пользователя, поэтому мне нужно проверять наличие атак SQL-инъекций.

Это пример, который я читал, где Drupal 6 анализирует значения, а версия drupal 7 - нет.

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

Ответы:


13

Уровень базы данных Drupal охватывает PDO и использует подготовленные операторы, поэтому да, операторы вставки очищаются и защищаются от атак SQL-инъекций.

Эта цитата из подготовленных документов говорит лучше всего:

Параметры для подготовленных утверждений не должны быть указаны; водитель автоматически обрабатывает это. Если приложение использует исключительно подготовленные операторы, разработчик может быть уверен, что SQL-инъекция не произойдет (однако, если другие части запроса создаются с неэкранированным вводом, SQL-инъекция все еще возможна).

То же самое верно для всех функций базы данных в Drupal 7 ( db_select, db_deleteи т. Д.). Единственное, что по-прежнему потенциально небезопасно, - db_query()это выполнение любой произвольной строки, которую вы ему передадите. Даже db_query()если вы можете передать параметры, чтобы ваш запрос был безопасным.

Документы уровня абстракции базы данных содержат дополнительную информацию.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.