⊗ppSpPDQu 58 of 83 menu

ปัญหาของการ query ใน PDO ของ PHP

ดังที่คุณทราบดีแล้วว่า คำสั่ง SQL นั้นเสี่ยงต่อการถูกโจมตีด้วย SQL injection ส่วนขยาย PDO ถูกสร้างขึ้นมาเพื่อจัดการกับปัญหา injection เหล่านี้ แต่ โดยค่าเริ่มต้นแล้ว มันจะไม่ทำการป้องกันให้โดยอัตโนมัติ

เรามาดูปัญหาด้วยตัวอย่างกัน สมมติว่าเรามีคำสั่ง query ต่อไปนี้ ซึ่งมีการแทรกตัวแปรเข้าไป:

<?php $sql = "SELECT * FROM users WHERE id=$id"; $res = $pdo->query($sql); ?>

สมมติว่าตัวแปรของเรามาจากแหล่งข้อมูลภายนอก เช่น มาจากพารามิเตอร์ GET เพื่อให้ง่ายขึ้น เรามากำหนดค่า ของมันด้วยมือกัน เราคาดหวังว่าจะได้ค่า ตัวเลขบางค่า เช่น ค่านี้:

<?php $id = 1; ?>

อย่างไรก็ตาม แฮกเกอร์เจ้าเล่ห์สามารถส่ง ค่าต่อไปนี้มาได้ (สมมติว่าเรามี ฟิลด์ role):

<?php $id = '-1 OR role="admin"'; ?>

ปรากฏว่า เราต้องการคำสั่ง query นี้:

<?php $sql = "SELECT * FROM users WHERE id=1"; $res = $pdo->query($sql); ?>

แต่กลับได้คำสั่ง query ต่อไปนี้ ซึ่งดึงข้อมูล ผู้ดูแลระบบของเว็บไซต์ออกมา:

<?php $sql = "SELECT * FROM users WHERE id=-1 OR role="admin""; $res = $pdo->query($sql); ?>

เพื่อหลีกเลี่ยงสถานการณ์เช่นนี้ ใน PDO จึงมีกลไกพิเศษเตรียมไว้ ซึ่งเรียกว่า prepared statements ซึ่งเราจะมาศึกษาในบทเรียนถัดไป

ให้ลองทำ SQL injection ไปยังฐานข้อมูลของคุณอย่างตั้งใจ

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ