วิธีป้องกัน 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 ได้แล้ว

ความคิดเห็น

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

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

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

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

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