apakah db_insert aman?

15

Saya menggunakan metode Drupal 7 db_insert , untuk memasukkan data ke tabel khusus dalam database Drupal. Saya telah membaca bahwa ini adalah cara yang lebih disukai, namun saya telah berjalan melalui kode dan dokumen dan saya tidak bisa melihat di mana pun yang mem-parsing nilai-nilai, atau memberitahu saya bahwa nilai-nilai ini aman.

Beberapa nilai berasal dari pengguna jadi saya perlu memeriksa terhadap serangan SQL Injection.

Ini adalah contoh yang saya baca, di mana Drupal 6 mem-parsing nilai-nilai, dan versi 7 drupal tidak.

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

sumber

Jawaban:

13

Lapisan database Drupal membungkus PDO dan menggunakan pernyataan yang disiapkan, jadi ya, pernyataan insert dibersihkan dan dilindungi dari serangan injeksi SQL.

Kutipan dari Pernyataan Dokumen yang Disiapkan mengatakan yang terbaik:

Parameter untuk pernyataan yang disiapkan tidak perlu dikutip; pengemudi secara otomatis menangani ini. Jika aplikasi secara eksklusif menggunakan pernyataan yang disiapkan, pengembang dapat yakin bahwa tidak ada injeksi SQL akan terjadi (namun, jika bagian lain dari kueri sedang dibangun dengan input yang tidak terhapus, injeksi SQL masih dimungkinkan).

Hal yang sama berlaku untuk semua fungsi database di Drupal 7 ( db_select, db_delete, dll). Satu-satunya yang masih berpotensi tidak aman adalah db_query()yang akan mengeksekusi string arbitrer apa pun yang Anda berikan. Bahkan dengan db_query(), Anda dapat mengirimkan parameter sehingga permintaan Anda aman.

The lapisan database abstraksi docs memiliki beberapa informasi lebih lanjut.

Clive
sumber