db_insert có an toàn không?


15

Tôi đang sử dụng phương thức Drupal 7 db_insert , để chèn dữ liệu vào bảng tùy chỉnh trong cơ sở dữ liệu Drupal. Tôi đã đọc rằng đây là cách ưa thích, tuy nhiên tôi đã xem qua mã và tài liệu và tôi không thể thấy bất cứ nơi nào phân tích các giá trị hoặc nói với tôi rằng các giá trị này là an toàn.

Một số giá trị đến từ người dùng, vì vậy tôi cần kiểm tra chống lại các cuộc tấn công SQL Injection.

Đây là ví dụ tôi đã đọc, trong đó Drupal 6 phân tích các giá trị, còn phiên bản drupal 7 thì không.

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

Câu trả lời:


13

Lớp cơ sở dữ liệu Drupal bao bọc xung quanh PDO và sử dụng các câu lệnh đã chuẩn bị, vì vậy, các câu lệnh chèn được khử trùng và bảo vệ khỏi các cuộc tấn công SQL SQL.

Trích dẫn này từ các tài liệu Tuyên bố đã chuẩn bị nói rằng nó tốt nhất:

Các tham số cho các báo cáo được chuẩn bị không cần phải được trích dẫn; trình điều khiển tự động xử lý này. Nếu một ứng dụng chỉ sử dụng các câu lệnh được chuẩn bị, nhà phát triển có thể chắc chắn rằng sẽ không xảy ra tình trạng tiêm SQL nào (tuy nhiên, nếu các phần khác của truy vấn đang được xây dựng với đầu vào không thoát, thì vẫn có thể tiêm SQL).

Điều này cũng đúng đối với tất cả các chức năng cơ sở dữ liệu trong Drupal 7 ( db_select, db_delete, vv). Điều duy nhất vẫn còn có khả năng không an toàn là db_query()sẽ thực thi bất kỳ chuỗi tùy ý nào bạn truyền cho nó. Mặc dù với db_query(), mặc dù, bạn có thể truyền tham số để truy vấn của bạn an toàn.

Các tài liệu lớp trừu tượng cơ sở dữ liệu có thêm một số thông tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.