Score:2

Is the following code secure when saving data to database?

ธง 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();
    
Score:1
ธง us

ตราบใดที่ค่าที่ป้อนจากผู้ใช้ไม่ได้ต่อเข้ากับสตริงที่ใช้สำหรับคำสั่ง SQL โดยตรง ก็ไม่ควรมีความเสี่ยงด้านความปลอดภัยใดๆ

รหัสที่แสดงในคำถามมีความปลอดภัยเนื่องจากใช้วิธีการที่ดูแลการจัดการค่าที่ป้อนโดยผู้ใช้เพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้น

รหัสต่อไปนี้เป็นตัวอย่างของสิ่งที่ควรหลีกเลี่ยง

$db = \Drupal::service('ฐานข้อมูล');
$db->query("SELECT * FROM {users} WHERE name = '" . $form_state->getValue('name') . "'");

หากป้อนค่าสำหรับ ชื่อ คือ ' หรือ '1'='1' --ข้อความค้นหาที่ดำเนินการจะกลายเป็นข้อความต่อไปนี้ (-- คือความเห็นเริ่มต้น)

เลือก * จาก {ผู้ใช้} โดยที่ name = '' หรือ '1'='1' --

หากอนุญาตให้ใช้คำสั่งหลายคำสั่ง ค่าที่ป้อนจากผู้ใช้อาจลบตารางฐานข้อมูล ซึ่งอาจเป็นไปได้โดยการป้อน ก'; วางตาราง {ผู้ใช้}; --. ในกรณีนี้ ข้อความค้นหาที่ดำเนินการจะกลายเป็นข้อความต่อไปนี้ (ความคิดเห็นในตอนท้ายเป็นเพียงการปล่อยให้โปรแกรมฐานข้อมูลละเว้นส่วนที่เหลือของข้อความค้นหา)

เลือก * จาก {ผู้ใช้} โดยที่ name = 'a'; วางตาราง {ผู้ใช้}; --

ค่าที่ป้อนโดยผู้ใช้จำเป็นต้องได้รับการฆ่าเชื้ออย่างเหมาะสมเมื่อแสดงผลในหน้า พวกเขาไม่ควรได้รับการฆ่าเชื้อเมื่อบันทึกไว้ในฐานข้อมูล

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา