Nội dung Cách phát hiện và khắc phục lỗi SQL injection trong PHP
SQL Injection Là một trong những kiểu hack web phổ biến vào những năm trước
đây, nhưng mãi cho đến hiện nay vẫn có khá nhiều trang web vẫn mắc lỗi này vì
thế trong bài viết này sẽ mô tả về SQL injection và bạn sẽ cảm thấy an tâm hơn
khi hiểu rõ về nó.
Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng
dụng web xử lí, bạn có thể login mà không cần username và password, remote
execution, dump data và lấy root của SQL server.
Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet
Explorer, Netscape, ...etc
Cách phát hiện:
1. Ở PHP thông thường sẽ có 2 dạng về lỗi này, dạng thứ nhất có
thể nhìn thấy được - gọi là thẳng là SQL injection, dạng thứ hai không nhìn thấy
đựơc mặc dù nó bị lỗi thiệt - gọi là Blind SQL injection.
Thông thường thì để kiểm tra lỗi SQL injection ở dạng thứ nhất, ta thường thêm
dấu ' (dấu nhấy) vào phía sau các địa chỉ có dạng: user.php?id=1 hoặc
user.php?id=
vd:
http://site.com/user.php?id=1' và
http://site.com/user.php?id=' đều được.
2. Còn ở dạng thứ hai thì khó hơn, bởi vì người ta có thể dễ
dàng ngăn chặn các thông báo lỗi gửi từ máy chủ bằng cách thêm ký tự @ trước câu
lệnh SQL, ví dụ:
view plainprint?
- $id = $_GET[id];
- mysql_query("SELECT * FROM sanchoituoitre.vn WHERE id=$id");
$id = $_GET[id]; @mysql_query("SELECT * FROM sanchoituoitre.vn WHERE
id=$id");
Nếu từ phía hacker thì sẽ khó có thể tìm ra được, vì thế nếu bạn không rõ về SQL
injection bạn có thể thêm @ vào trước câu lệnh như trong ví dụ trên dùng để che
dấu lỗi.
Hoặc sử dụng error_reporting(0); ở đầu đoạn
PHP để che dấu lỗi.
Còn nếu site cần kiểm tra do bạn làm webmaster thì có thể làm như sau:
view plainprint?
- $id = $_GET[id];
- mysql_query("SELECT * FROM sanchoituoitre.vn WHERE id=$id");
$id = $_GET[id]; @mysql_query("SELECT * FROM sanchoituoitre.vn WHERE
id=$id");
Với cách phát hiện:
http://site.com/user.php?id=' thì biến $id sẽ được khai báo là ' (dấu nháy)
nếu bị dính lỗi, và trong đoạn code đã dùng print để in giá trị
của biến $id ra, nếu nhìn thấy dấu nhấy thì là dính lỗi, nếu không thì hãy kiểm
tra lại 1 lần nữa vì trong đoạn code trên hoàn toàn chưa được fix lỗi, he he.
Cách khắc phục:
Cũng căn cứ theo ví dụ trên, bạn có thể dùng hàm intval() để khắc phục lỗi này,
ví dụ:
+ Chưa fix (unfix):
view plainprint?
- $id = $_GET[id];
- mysql_query("SELECT * FROM sanchoituoitre.vn WHERE id=$id");
$id = $_GET[id]; @mysql_query("SELECT * FROM sanchoituoitre.vn WHERE
id=$id");
+ Đã fix (fixed):
view plainprint?
- $id = $_GET[id];
- mysql_query("SELECT * FROM sanchoituoitre.vn WHERE id=$id");
$id = $_GET[id]; @mysql_query("SELECT * FROM sanchoituoitre.vn WHERE
id=$id");
Trong intval, int có nghĩa là integrals (Số nguyên) còn val có nghĩa là value (Giá
trị) vì vậy giá trị của biến $id phải là số nguyên, làm vậy hacker sẽ không thể
inject (tiêm vô) đoạn SQL của bạn.
(Cung cấp bởi sanchoituoitre.vn)
Source Cách phát hiện và khắc phục lỗi SQL injection trong PHP: ThongTinBaoMat.Com,Tác giả php.net.vn Cách phát hiện và khắc phục lỗi SQL injection trong PHP Tags Bảo | mật | ứng dụng | Web | Ngăn chặn | malware | và | virus | bảo mật | | tối ưu | băng thông | Mạng Riêng Ảo | VPN | Lợi Ích Những bài viết tương tự Cách phát hiện và khắc phục lỗi SQL injection trong PHP: Anti PHP-SQL Injection | Khắc phục hậu quả của Windows XP/Vista Recovery | Tìm hiểu các phím tắt của Facebook | Giải pháp bảo mật và phân tích môi trường NetBotz thế hệ mới | Phần mềm miễn phí bảo vệ máy tính và sự riêng tư | Mã hóa phân vùng lưu trữ dữ liệu Dropbox với BoxCryptor | 4 phần mềm diệt virus miễn phí tốt nhất cho Windows | Malware di động đã tới thời nguy hiểm | 5 mẹo cải thiện hiệu suất máy chủ Linux | HTTP authentication with PHP |