Share Tìm hiểu về tấn công SQL Injection và cách phòng chống khi lập trình PHP

filiallion

Administrator
Staff member
Administrator
Messages
585
Points
10
Language
Tiếng Việt
SQL Injection là một kỹ thuật lợi dụng những lỗ hổng về câu truy vấn lấy dữ liệu của những website không an toàn trên Internet, đây là một kỹ thuật tấn công rất phổ biến và sự thành công của nó cũng tương đối cao.

Sau đây tôi sẽ nêu ra một vài đặc điểm để các bạn thấy được tấn công SQL Injection lại trở nên nổi tiếng và nguy hiểm đến như vậy:
  • Với SQL Injection, hacker có thể truy cập một phần hoặc toàn bộ dữ liệu trong hệ thống.
  • Việc thực hiện tấn công SQL Injection không đòi hỏi người có kỹ năng giỏi về lập trình, thậm chí với những người không chuyên cũng có thể thực hiện chỉ bằng những công cụ đã được thiết kế sẵn và chỉ việc mở lên sử dụng thôi.
  • Rất nhiều những công ty lớn như Microsoft, Sony,... đã từng dính phải lỗ hỗng này và còn nhiều những vụ việc liên quan khác.
Dễ tấn công, phổ biến, gây ra hậu quả nghiêm trọng, đó là lý dó SQL Injection trở nên nổi tiếng đến như vậy. Và những hậu quả do SQL Injection gây ra là vô cùng lớn.

Tôi ví dụ với các bạn lỗ hỗng SQL Injection khi các bạn lập trình với PHP, các bạn tham khảo nội dung mã lệnh như sau:
PHP:
$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * FROM tbl_user WHERE username = '$username' AND password = '$password'";
Với nội dung mã lệnh như trên và tôi truy vấn câu SQL này với tài khoản và mật khẩu được truyền vào giả sử lần lượt là "admin" và "123" thì lúc này biến $sql sẽ là chuỗi SQL như sau:
SQL:
SELECT * FROM tbl_user WHERE username = 'admin' AND password = '123'
Với câu truy vấn SQL này thì không có vấn đề gì phải không? Nhưng nếu tôi truyền vào tài khoản và mật khẩu lần lượt là "admin" và "' OR '1' = '1" thì sao, các bạn sẽ có biến $sql chứa nội dung chuỗi SQL như sau:
SQL:
SELECT * FROM tbl_user WHERE username = 'admin' AND password = '' OR '1' = '1'
Với câu truy vấn SQL này thì các bạn đã hiểu lỗi ở đâu rồi phải không?

Khi lập trình với PHP, các bạn nên lọc dữ liệu đầu vào, bắt ràng buộc dữ liệu do người dùng nhập để đảm bảo dữ liệu tiếp nhận là hợp lệ. Ngoài ra, các bạn cũng nên sử dụng PDO trong lập trình, hiện tại PDO cũng đã hỗ trợ khá nhiều cơ sở dữ liệu phổ biến hiện này trong đó có MySQL. Riêng MySQL các bạn có thể sử dụng MySQLi nếu không thể tiếp cận được với PDO.

Trên đây chỉ là một vài thông tin ngắn gọn giúp các bạn hình dung được tấn công SQL Injection là gì để các bạn có hướng tìm hiểu thêm về nó.
 
Back
Top