รวมวิธีป้องกัน sql injection จากเว็บอื่น


หน้าแรก PHP MySQL เกร็ดความรู้ รวมวิธีป้องกัน sql injection จากเว็บอื่น
1. การป้องกัน sql injection แบบเก่าๆ เลิกใช้ได้แล้วพวก mysql_real_escape_string
php เค้าเอาออกแล้วครับ (current stable version ปัจจุบันอยู่ที่ 5.5)

2. ไปใช้ MYSQL PDO/ MYSQLi prepare statement แล้ว bind parameter เอา
(ไม่ต้องนั่งกังวลอีกต่อไป รับมายังไงก็ bind ไปอย่างนั้น จบ)



  Code
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>




เพิ่มเติม 3.
พวก html filter ต่างๆ ไม่เกี่ยวกับ sql injection
แต่เกี่ยวกับการป้องกัน post html tag / script tag ขึ้นมาบนเว็บ

====================================================================================

addslashes() ก็มีเคสที่โดน sql injection ได้
mysql_real_escape_string() ก็มีเคสที่ยังโดน sql injection ได้
mysql_real_escape_string php ปรับเป็น deprecated ตั้งแต่ 5.3 แล้ว current stable ปัจจุบันก็เอาออกไปแล้ว ไม่สามารถใช้งานได้อีก

prepare statement >> กันได้ 100%
prepare statement >> รับมายังไงก็ใส่ไปได้เลยไม่เสียเวลานั่ง real escape + addslash
prepare statement >> อ่าน query ได้ง่ายกว่าเยอะมากๆ

เค้าใช้ prepare statement กันหมดทั้งโลกแล้วครับ
framework ที่ทำฝั่ง model มาให้ ก็ใช้กันหมด
ทุก ORM framework เค้าก็ใช้ prepare statement กันหมด

ผมยังไม่เห็นว่า การที่ต้องไปนั่ง addslashes() ทุกครั้งที่รับ parameter มา มันน่าใช้กว่าตรงไหนเลยครับ ทำให้รำคาญซะอีก

ขึ้นไปด้านบน