Devdit
 

PHP ป้องกัน SQL Injection

1.7K

บทความนี้สอนเขียน PHP ป้องกัน SQL Injection ด้วยคำสั่ง prepare และ bind_param โดย SQL Injection คือวิธีการโจมตีระบบโดยการแทรกคำสั่ง SQL ลงในชุดคำสั่ง SQL ของระบบ การใช้คำสั่งดังกล่าวจะช่วยป้องกัน SQL Injection ได้ สามารถเขียนโค้ดได้ดังนี้

 

ตัวอย่าง PHP ป้องกัน SQL Injection

พิจารณาการเขียนโค้ดแบบเดิม ที่ไม่ได้ใช้คำสั่ง prepare และ bind_param มีการส่งตัวแปร name เข้าไปในคำสั่ง SQL โดยตรง

$sql = "INSERT INTO product (name) VALUES ('$name')";
if ($conn->query($sql) === TRUE) {
	...
}

เปลี่ยนมาใช้คำสั่ง prepare และ bind_param กับโค้ดด้านบน เพื่อป้องกัน SQL Injection ได้ดังนี้

$stmt = $conn->prepare("INSERT INTO product (name, price) VALUES (?, ?)");
$stmt->bind_param("si", $name, $price);
if ($stmt->execute() === TRUE) {
	...
}

โค้ดใหม่นี้มีการใช้คำสั่ง prepare และ bind_param เพื่อป้องกันการโจมตีแบบ SQL Injection ของภาษา PHP โดยหลักการคือ

1.  prepare จะเตรียมคำสั่ง SQL พร้อมค่าใดๆ ที่จะส่งเข้าไปด้วยเครื่องหมาย ?

2. bind_param จะนำค่าตัวแปรที่ต้องการใส่เข้าไปใน SQL โดย เรียงลำดับตามคำสั่ง SQL เช่น

2.1 s แรกคือ string อ้างถึงตัวแปรแรก คือ $name

2.2 i สองคือ int อ้างถึงตัวแปรสอง คือ $price

3. เวลาประมวลผลคำสั่ง SQL จะใช้ execute แทน query

 

สรุป การเขียน PHP ร่วมกับ SQL ควรใช้คำสั่ง prepare และ bind_param เพื่อป้องกัน SQL Injection เนื่องจากวิธีการโจมตีแบบนี้หากไม่ป้องกัน จะทำให้ผู้ไม่หวังดีสามารถเข้าถึงข้อมูลได้ โดยที่ตัวเองไม่ได้รับสิทธิ ซึ่งจะทำให้เกิดความเสียหายกับระบบ และข้อมูลที่มีคุณค่าของเรา

แก้ไข 1 ปีที่แล้ว
ชอบ
ลิ้งก์
แชร์
Devdit มีช่อง YouTube แล้ว
เราสร้างวิดีโอเกี่ยวกับเทคโนโลยี ทำตามง่ายๆ