Nội dung Anti PHP-SQL Injection
1.SQL Injection
- Hầu hết các lỗi SQL Injection đều là do câu lệnh SQL sai hoặc do User làm
cho câu lệnh SQL sai , không thực hiện đúng chức năng của nó . Ví dụ như chúng
ta có một Script kiểm tra đăng nhập như sau :
Mã lệnh (php)
<?
//Các lệnh Connect vào SQL
Database .v.v.
$username =
$_POST['username'];
//Lấy User và Pass từ Form
$password =
$_POST['password'];
$result =
mysql_query("SELECT
* FROM users WHERE user = \"$username\" AND password = \"$password\"");
if (mysql_num_rows($result)
> 0) {
//Đăng nhập thành công
}
else {
//Đăng nhập không đúng Username hay Password
}
//.......
?>
- Đoạn Script trên là một đoạn Script rất đơn giản thực
hiện Login thông qua câu SQL kiểm tra username và password . Câu lệnh SQL nguyên
thủy là :
SELECT * FROM users WHERE user = "$username"
AND password = "$password"
- Tuy nhiên, đây lại là một SQL Injection vô cùng lớn,
nếu như User nhập biến User là " OR 1 OR user="
- Khi đó lệnh SQL sẽ trở thành :
SELECT * FROM users WHERE user = "" OR 1 OR
user="" AND password = "$password"
- Kết quả trả về sẽ là toàn bộ user trong Database và
dĩ nhiên đây là một trường hợp Login không hợp lệ (biến password cũng có thể sữ
dụng để tạo SQL Injection) . Thực ra, lỗi trên là do biến $username, có thể fix
bằng cách kiểm tra biến user, rồi sau đó mới kiểm tra biến pass, hoặc một cách
nhanh hơn, fix được hầu hết tất cả các lỗi SQL Injection mà chỉ cần sữ dụng một
hàm có sẵn của PHP, đó là hàm addslashes .
- Xin nói một chút về hàm addslashes: hàm này sẽ trả về
một chuỗi với dấu \ trước các ký tự cần trích dẫn trong Database, các ký tự đó
là " \ và NUL (\0) .
- Cấu trúc hàm addslashes : string addslashes ( string
str)
- Nhờ có hàm addslashes mà câu lệnh SQL của ta sẽ trở
thành :
SELECT * FROM users WHERE user = "\" OR 1 OR
user=\"" AND password = "$password"
- Như vậy thì câu lệnh SQL sẽ hoạt động đúng như chức
năng của nó . Một số lỗi SQL Injection khác cũng có thể khắc phục bằng phương
pháp này. Tôi cũng xin nhắc lại là phương pháp này chỉ fix được hầu hết tất cả
các lỗi SQL Injection, tức là các lỗi do biến PHP gây ra, còn các lỗi do bản
thân câu lệnh SQL thì cách này không có hiệu quả gì. Tuy nhiên nếu dùng phương
pháp này và câu lệnh SQL chắc chắn thì tôi tin rằng bạn sẽ không còn lo lắng về
SQL Injection.
2.PHP Injection
- Lỗi PHP Injection thường xảy ra với các script đọc
File, tương tác hệ thống v.v. . Đây là một điển hình của PHP Injection:
Mã lệnh (php)
<?
//...
readfile($file);
//...
?>
- Thoạt nhìn thì không có lỗi gì, nhưng nếu như vì một
lý do gì đó mà biến $file không được khai báo thì đây là một lỗi PHP Injection
rất nặng. Nếu như Link đưa đến trang có lỗi như thế này :
http://somehost.com/somescript.php?file=somescript.php
- Lúc này thì biến $file lại được khai báo bởi chính
PHP, chức năng Regiser-Global và kết quả là sẽ đưa ra nội dung của file
somescript.php hay bất cứ File nào trên hệ thống (kể cả File chức Password nếu
hacker chịu khó mò và xem như host của chúng ta tiêu luôn).
- Nếu phân tích thì ta sẽ thấy rằng biến $file đã được
khai báo do chức năng Register-Global (chức năng tự động đăng ký các biến trong
GET, POST , COOKIE v.v...), và được fix một cách đơn giản là tắt chức năng này
đi. Việc tắt chức năng này đi cũng không ảnh hưởng gì nhiều đến PHP. Source Anti PHP-SQL Injection: ThongTinBaoMat.Com,theo vncoder.net,giaiphaptructuyenAnti PHP-SQL Injection 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ự Anti PHP-SQL Injection: Cách phát hiện và khắc phục lỗi SQL injection trong PHP | Advanced Anti Spy 4.3.2 | CMC Anti-Virus | HTTP authentication with PHP | Davor’s PHP Editor | AVG Anti-Virus Free Edition 8.0.176 | Bảo mật với PHP & Mysql Phần 1 | Bảo mật với PHP & Mysql Phần 2 | Bảo mật với PHP và Mysql phần 03 | Avira AntiVir PersonalEdition Classic là phần mềm anti-virus miễn phí |