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:
|
SELECT * FROM accounts WHERE userName = '{$userName}'
|
Đâ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
|
SELECT * FROM accounts WHERE userName = '{$userName}' OR '1' = '1'
|
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:
|
SELECT * FROM accounts WHERE userName = '{$userName}'; DROP TABLE accounts; ''
|
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é! ^^
Nguồn: Sharecode.vn