วิธีป้องกัน SQL injection PHP กับ codeigniter



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

หน้าจอ login ถ้าเรา รับ parameter เป็น username กับ password แล้วนำไปใช้ใน SQL Query
แบบง่ายๆ เช่น

select * from muser where username='$user_name' and password='$passwrod'

ดูแล้วก็ไม่น่าจะมีอะไรแต่ลองนึกภาพดูนะ ยกตัวอย่างจาก statement ข้างต้น สิ่งที่ได้คือคำสั่งนี้

select * from muser where username='admin' and password='admin1234'

ถ้าหากผู้ไม่หวังดีส่งค่าของ $password เข้ามาแบบนี้ล่ะ    test' or '1'='1 
ลองแทนค่าดูก็จะได้แบบนี้

select * from muser where username='admin' and password='test' or '1'='1'

คำสั่ง or 1=1 เป็นจริงเสมอรับรองได้เลยว่าไม่ว่าจะใส่ username , password มั่วๆ เข้ามา
ก็สามารถทะลุหน้าจอ login เราเข้าไปได้แน่นอน
แบบนี้แหละเขาเรียกว่าปัญหา  SQL injection 

แนวทางแก้แบบง่ายๆ เลยนะให้เปลี่ยนไปใช้คำสั่งนี้ครับ

$dbResult = $this->db->query("SELECT * FROM users WHERE username = ?", array($this->input->post('username')));

เพียงเท่านี้ก็สามารถป้องกันปัญหา SQL injection ได้แล้ว

ความคิดเห็น

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

java -Xms , java -Xmx กำหมด memory ให้ JVM เพื่อป้องกันปัญหา Out of Memory

Oracle date format จัด format date ให้แสดง พศ และ เดือน ภาษาไทยหรือตามภาษาที่เราเลือก

Java this กับ super การใช้งานคำสั่ง this กับ super ใน ภาษา Java