ตราบใดที่ค่าที่ป้อนจากผู้ใช้ไม่ได้ต่อเข้ากับสตริงที่ใช้สำหรับคำสั่ง SQL โดยตรง ก็ไม่ควรมีความเสี่ยงด้านความปลอดภัยใดๆ
รหัสที่แสดงในคำถามมีความปลอดภัยเนื่องจากใช้วิธีการที่ดูแลการจัดการค่าที่ป้อนโดยผู้ใช้เพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้น
รหัสต่อไปนี้เป็นตัวอย่างของสิ่งที่ควรหลีกเลี่ยง
$db = \Drupal::service('ฐานข้อมูล');
$db->query("SELECT * FROM {users} WHERE name = '" . $form_state->getValue('name') . "'");
หากป้อนค่าสำหรับ ชื่อ คือ ' หรือ '1'='1' --
ข้อความค้นหาที่ดำเนินการจะกลายเป็นข้อความต่อไปนี้ (--
คือความเห็นเริ่มต้น)
เลือก * จาก {ผู้ใช้} โดยที่ name = '' หรือ '1'='1' --
หากอนุญาตให้ใช้คำสั่งหลายคำสั่ง ค่าที่ป้อนจากผู้ใช้อาจลบตารางฐานข้อมูล ซึ่งอาจเป็นไปได้โดยการป้อน ก'; วางตาราง {ผู้ใช้}; --
. ในกรณีนี้ ข้อความค้นหาที่ดำเนินการจะกลายเป็นข้อความต่อไปนี้ (ความคิดเห็นในตอนท้ายเป็นเพียงการปล่อยให้โปรแกรมฐานข้อมูลละเว้นส่วนที่เหลือของข้อความค้นหา)
เลือก * จาก {ผู้ใช้} โดยที่ name = 'a'; วางตาราง {ผู้ใช้}; --
ค่าที่ป้อนโดยผู้ใช้จำเป็นต้องได้รับการฆ่าเชื้ออย่างเหมาะสมเมื่อแสดงผลในหน้า พวกเขาไม่ควรได้รับการฆ่าเชื้อเมื่อบันทึกไว้ในฐานข้อมูล