Tôi tin rằng mã của bạn có thể dễ bị tấn công tra tấn thư mục - nếu ai đó cung cấp "/../../foo" dưới dạng fileid
, thì đường dẫn sẽ là "filename/../../foo.txt"
, có thể là mục tiêu hợp lệ. Xem: http://en.wikipedia.org/wiki/Directory_traversal
Tôi với @jeroen và @ shiplu.mokadd.im người gợi ý vệ sinh đầu vào của bạn - giả fileid
là một con số thì intval()
chức năng sẽ làm bạn tốt:
$num = $_GET['fileid'];
$num = intval($num);
if($num == 0) {
echo "Invalid file ID: Not a number.";
exit;
} else {
$fileName = 'filename' . $num . '.txt';
if(!file_exists($fileName)) {
echo "Invalid file ID: Doesn't exist.";
} else {
// do something
}
}
Trong Ext3/4 FS '\ 0' ký tự chỉ bị tước –
Tôi sẽ loại bỏ tất cả các nghi ngờ và chỉ cần xác nhận đầu vào; sử dụng danh sách trắng, sử dụng regex, truyền tới int hoặc bất kỳ điều gì áp dụng tốt nhất. – jeroen
% 00 --- http://ha.ckers.org/blog/20060914/php-vulnerable-to-null-byte-injection/ – user956584