безпечно db_insert?


15

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

Деякі значення надходять від користувача, тому мені потрібно перевірити наявність атак SQL Injection.

Це приклад, який я читав, де 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.