Điểm:2

Is the following code secure when saving data to database?

lá cờ th
fin

I have a form that I want to save to database. Do you consider the following code safe? I get the value directly from the $form_state and pass it into query. My understanding, it query will do the safe filter for me.

       $db = \Drupal::service('database');

       
        $result = $db->insert('invitation')
        ->fields([
            'guest_email' => $form_state->getValue('email'),
            'guest_name' => $form_state->getValue('name'),
            'guest_type' => $form_satte->getValue('type'),
            'created' => \Drupal::time()->getRequestTime(),
        ])
        ->execute();
    
Điểm:1
lá cờ us

Miễn là các giá trị được nhập từ người dùng không được nối trực tiếp vào chuỗi được sử dụng cho câu lệnh SQL, thì sẽ không có bất kỳ rủi ro bảo mật nào.

Mã hiển thị trong câu hỏi là an toàn vì mã này sử dụng các phương thức xử lý các giá trị do người dùng nhập để tránh mọi sự cố có thể xảy ra.

Đoạn mã sau đây là một ví dụ về những điều cần tránh.

$db = \Drupal::service('database');
$db->query("CHỌN * TỪ {người dùng} WHERE name = '" . $form_state->getValue('name') . "'");

Nếu giá trị được nhập cho Tên' HOẶC '1'='1' --, truy vấn đã thực hiện sẽ trở thành truy vấn sau. (-- là bình luận bắt đầu.)

CHỌN * TỪ {người dùng} WHERE name = '' OR '1'='1' --

Nếu nhiều câu lệnh được cho phép, thì giá trị được nhập từ người dùng cũng có thể, chẳng hạn, xóa một bảng cơ sở dữ liệu, điều này có thể thực hiện được bằng cách nhập một'; DROP TABLE {người dùng}; --. Trong trường hợp này, truy vấn đã thực hiện sẽ trở thành truy vấn sau. (Nhận xét ở cuối chỉ để cho công cụ cơ sở dữ liệu bỏ qua phần còn lại của truy vấn.)

CHỌN * TỪ {người dùng} WHERE name = 'a'; DROP TABLE {người dùng}; --

Các giá trị do người dùng nhập vào cần được làm sạch thích hợp khi xuất trong một trang. Chúng không nên được vệ sinh cho điều đó khi được lưu trong cơ sở dữ liệu.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.