SQL Injection là gì?

Bài viết này sẽ chia sẻ cho các bạn hiểu hơn về SQL Injection!

Thế nào là SQL Injection

SQL Injection là một kỹ thuật tấn công vào câu lệnh cơ sở dữ liệu thông qua chèn các đoạn mã độc vào SQL để đánh lạc hướng xử lý  với mục đích phá hủy dữ liệu hoặc ăn cắp.

Thế nào là SQL Injection

Thế nào là SQL Injection

Một số ví dụ

1. Tấn công bằng mệnh đề luôn đúng

Những lỗi lập trình này thường xảy ra ở các chức năng tìm kiếm hoặc đăng nhập tài khoản. Ví dụ một câu lệnh SQL như sau:

Đây có lẽ là một câu lệnh quen thuộc đối với mỗi dân code trong chúng ta. Tiếp theo mình sẽ chỉ cho các bạn thấy đoạn SQL trên có rủi ro như thế nào nhé. Giả sử trong ô đăng nhập người dùng nhập thêm đằng sau là

 thì khi truy vấn, câu lệnh của chúng ta sẽ trở thành mệnh đề luôn đúng như dưới đây

Vì là luôn đúng, nên câu lệnh trên luôn thực thi và trả về kết quả khiến hacker cùi bắp có thể dễ dàng đăng nhập vào hệ thống của bạn một cách dễ dàng, và điều này là hết sức nguy hiểm, nhất là các trang quản trị toàn bộ nội dung hệ thống như backend vậy. Lần đầu tiên khi mình lập trình web một trang kết bạn cùi bắp cũng bị lỗi này và bị hack mất bao nhiêu là tài khoản 😀

2. Tấn công phá hoại trực tiếp dữ liệu

Giả sử câu lệnh cũng như trên, nhưng không nhập ‘1’ = ‘1’ nữa mà thêm như sau:

SQL hỗ trợ thực hiện nhiều câu lệnh thông qua dấu phân tách là ; nên nếu bị chơi một phát như trên là lập tức bảng accounts của bạn sẽ bị drop sạch dữ liệu mà không thể khôi phục đấy :))

3. Hướng khắc phục

Nếu bạn đang sử dụng PHP để lập trình website, thì mỗi khi nhận input dữ liệu các bạn sử dụng hàm addslashes để nó tự động thêm ký tự \ vào trước dấu ‘ (nháy đơn), ” (nháy kép) như thế sẽ không phá vỡ cấu trúc câu lệnh SQL của bạn được.

Lưu ý: Một số server có bật tính năng: magic_quotes_gpc lên thì không cần sử dụng addslashes nữa nhé các bạn.  Khi bật tính năng đó nó đã tự động thay thế công dụng của hàm addslashes rồi. Có khi còn làm dữ liệu của bạn trở nên xấu xí đó. Nhưng đa phần các VPS đều không được bật sẵn hàm này đâu 🙂

Kết luận

Để hệ thống an toàn, các bạn cần tuân thủ tuyệt đối hướng khắc phục trên mình gợi ý. Nếu không vào một ngày đẹp trời lại không hiểu tại sao mình không làm lộ mật khẩu mà lại mất toàn bộ dữ liệu thì khổ đó nhé! ^^