09/10/2018, 23:22
Bảo mật trong PHP
Xin hỏi các bác Triojan trong request là cái gì vậy ! sao mà nó dính kèm được trong $_REQUEST được ta.
CÒn SQL inject : nếu trong sql mình set kiểu ni "select * form `session` where ip='$ip union delete * from session'; liệu sql của mình có bị inject không.
CÒn SQL inject : nếu trong sql mình set kiểu ni "select * form `session` where ip='$ip union delete * from session'; liệu sql của mình có bị inject không.
Bài liên quan
Bảo mật trong PHP phải chú ý đến 3 nguy hiểm chính:
- Cross site scripting
- SQL injection
- Buffer overflow in Mysql
1. Để khắc phục nên dùng các hàm str_replace , strip_tags , htmlspecialchars , htmlentities ...vvv để tránh việc gọi hoặc chèn các đoạn mã không mong muốn
2. Lỗi này chạy yêu cầu thực thi SQL không mong muốn. Để chống lại tham khảo nhóm hàm addslashes
3. Cái này thường thấy ở PHP site Việt Nam. Dữ liệu được đưa vào không kiểm tra khiến ngập lụt, gây quá tải cho server hoặc thừa chồng chéo trong Database. Hãy dùng Capcha Image để chống hoặc 1 cách tương tự mà bạn phát triển lên.
Giả sử bạn có 1 form để kiểm tra đăng nhập dạng như chỉ kiểm tra mỗi password
<form method="post" action="login.php">
<input type="password" name="password">
<input type="submit" value="login">
</form>
Như vậy để kiểm tra đăng nhập bạn sẽ làm như sau
PHP:
$password= $_POST["password"];
MySQL:
Select * From tbl_users Where password='$password'
Nếu kết quả câu truy vấn trên cho ra bản ghi thì ok đăng nhập thành công còn nếu kết quả ra Null thì đăng nhập ko thành công.
Bây giờ hãy xét xem điều gì xảy ra khi người dùng nhập password=a' or '1'='1
Khi đó câu SQL sẽ là
Select * From tbl_users Where password='a' or '1'='1'
Rõ ràng câu SQL trên sẽ cho kết quả khác Null và người dùng có thể dễ dàng đăng nhập thành công.
Đó là 1 ví dụ đơn giản của SQL Injection, để xử lý vấn đề trên cần hết sức lưu ý đến các ký tự nguy hiểm như nháy đơn ('), nháy kép (") các toán tử (and) hoặc (or) ... bằng cách:
- Dùng hàm str_replace để thay thế các ký tự nguy hiểm
- Dùng hàm html_specialchars mã hóa các ký tự đặc biệt HTML
- Dùng hàm addslashes để chèn thêm ký tự \ cho ký tự nháy kép (")
- Truyền tham số theo kiểu parameter (cái này đã có trong class Zend_DB của Zend FrameWork)
.....
Các bài viết liên quan đến SQL Injection các bạn có thể tìm rất nhiều trên mạng.
- Đối với các loại dữ liệu dạng số -> sử dụng is_numeric, intval...
- Đối với các loại dữ liệu dạng chuỗi -> sử dụng RegEx để lọc hoặc có thể mã hóa trước khi đưa vào database
Nói chung bạn cần lấy cái gì thì chỉ nhận cái đó