db_insert güvenli midir?


15

Drupal veritabanındaki özel bir tabloya veri eklemek için Drupal 7 yöntemini db_insert kullanıyorum . Bu tercih edilen yol olduğunu okudum, ancak kod ve doco yürüdü ve ben değerleri ayrıştıran, ya da bu değerlerin güvenli olduğunu söyleyen bir yerde göremiyorum.

Bazı değerleri kullanıcı geliyor bu yüzden SQL enjeksiyon saldırılarına karşı kontrol etmek gerekir.

Bu, Drupal 6'nın değerleri ayrıştırdığı ve drupal 7 versiyonunun okumadığı örnekte okuyordum.

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

Yanıtlar:


13

Drupal veritabanı katmanı PDO'nun etrafını sarar ve hazırlanmış ifadeler kullanır, bu nedenle evet, insert ifadeleri sterilize edilir ve SQL enjeksiyon saldırılarına karşı korunur.

Hazırlanan Bildirimler belgelerinden yapılan bu alıntı en iyi şekilde şunu söylüyor:

Hazırlanan ifadelerin parametrelerinin alıntılanması gerekmez; sürücü bunu otomatik olarak yapar. Bir uygulama yalnızca hazırlanmış ifadeler kullanıyorsa, geliştirici hiçbir SQL enjeksiyonunun gerçekleşmeyeceğinden emin olabilir (ancak, sorgunun diğer kısımları kaçışsız girdi ile oluşturuluyorsa, SQL enjeksiyonu hala mümkündür).

Aynı Drupal 7 (veritabanı işlevlerinin tümü için geçerlidir db_select, db_deletevs.). Hala potansiyel olarak güvensiz db_query()olan tek şey, ona ilettiğiniz herhangi bir rastgele dizeyi yürütecek olanıdır . Bununla birlikte db_query(), sorgunuzun güvende olması için parametreleri iletebilirsiniz.

Veritabanı soyutlama katmanı dokümanlar bazı bilgiler var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.