ป้องกัน SQL Injection บน PHP และ MySQLi


หน้าแรก PHP MySQL เกร็ดความรู้ ป้องกัน SQL Injection บน PHP และ MySQLi
SQL Injection คือ วิธีการหนึ่งที่ถูกนำมาใช้ในการเจาะระบบด้วยช่องโหว่ทางการเขียนโปรแกรมรวมกับคำสั่งของ SQL ที่ส่งไปประมวลผล โดยบทความนี้แนะนำวิธีป้องกัน SQL Injection บน PHP และ MySQLi ด้วย 2 วิธี ดังนี้



วิธีป้องกัน SQL Injection บน PHP และ MySQLi

1. ใช้คำสั่ง prepare เพื่อกรองเงื่อนไขในการประมวลคำสั่ง SQL ด้วย parameter

2. ใช้ function real_escape_string() สำหรับค่าที่ Input เข้ามาก่อนส่งเข้าเงื่อนไขใน SQL



ตัวอย่างวิธีป้องกัน SQL Injection บน PHP และ MySQLi


  Code
<?
$conn = new mysqli("127.0.0.1", "root", "", "db_coffee");
$conn->query("set names utf8");
$pvc_title = $conn->real_escape_string("%ก%");
$sql = " select pvc_title from tb_province where ( pvc_title like ? ) ";
$pp = $conn->prepare($sql);
$pp->bind_param("s", $pvc_title);
$pp->execute();
$pp->bind_result($pvc_title);
while( $pp->fetch()) {

echo $pvc_title.'<br/>';

}
?>





อธิบายคำสั่งเบื้องต้นกับการป้องกัน SQL Injection บน PHP และ MySQLi

1. บรรทัดที่ 4 คำสั่ง real_escape_string() ใช้สำหรับการป้องกันอักขระแปลกปลอมจากการส่งเข้ามายังโปรแกรม

2. บรรทัดที่ 5 คำสั่ง SQL จะเปลี่ยนเป็นเครื่องหมาย ? แทนเงื่อนไขแบบเดิม เช่น pvc_title = '$pvc_title'

3. บรรทัดที่ 6 คำสั่ง prepare() คือ ส่วนเริ่มต้นการใข้คำสั่ง prepare โดยมีการส่งคำสั่ง SQL เป็นค่า parameter

4. บรรทัดที่ 7 คำสั่ง bind_param คือ ส่วนการกำหนดค่า parameter .ในส่วนของเครื่องหมาย ? ในคำสั่ง SQL โดย ค่า parameter แรก s คือ แทนที่ตัวแปรชนิด String และค่า parameter ที่ 2 แทนค่าตัวแปรที่เป็นเงื่อนไข

5. บรรทัดที่ 8 คำสั่ง execute() คือ คำสั่งประมวลผล

6. บรรทัดที่ 9 คำสั่ง bind_result() คือ การผูกเข้ากับ Field ที่ระบุ เพื่อใช้สำหรับการแสดงผล หากกรณีมีการระบุ Field มากกว่า 1 Field ให้กำหนดค่าตัวแปรเพิ่ม เช่น bind_result( $pvc_id, $pvc_title)

7. บรรทัดที่ 10 - 14 คือ คำสั่งการแสดงผล


refer: http://www.amplysoft.com/knowledge/prevent-sql-injection-php-mysqli.html

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