Lời chào, Tôi hy vọng sẽ làm cho chương trình nhỏ bé của tôi được an toàn để người dùng độc hại tiềm ẩn không thể xem các tệp nhạy cảm trên máy chủ.Vệ sinh đường dẫn tập tin trong PHP
$path = "/home/gsmcms/public_html/central/app/webroot/{$_GET['file']}";
if(file_exists($path)) {
echo file_get_contents($path);
} else {
header('HTTP/1.1 404 Not Found');
}
Tắt đầu tôi biết đầu vào như '../../../../../../etc/passwd' sẽ gặp sự cố, nhưng tự hỏi điều gì khác đầu vào bất tỉnh tôi nên mong đợi và làm thế nào để ngăn chặn chúng.
Chỉ loại trừ bất kỳ đầu vào nào chứa ../ – halfdan
Đồng ý rằng sẽ giải quyết được một vấn đề, nhưng tôi giả định rằng có nhiều mối nguy hiểm khác mà tôi cần tìm. Tôi đang tìm kiếm một giải pháp mạ sắt tốt cho tất cả chúng – SeanDowney
@halfdan - luôn luôn cố gắng tránh một cách tiếp cận danh sách đen để bảo mật như thế này, sẽ luôn có một cái gì đó bạn bỏ lỡ. Chẳng hạn như sử dụng các ký tự backspace, tab, newlines, null chars, các ký tự unicode khác, hoặc cố ý phá vỡ các ký tự unicode mà sẽ vượt qua bộ lọc của bạn, nhưng vẫn gây ra chức năng PHP để làm một cái gì đó bạn đang cố gắng để bảo vệ nó. Kiểm tra những gì bạn thực sự muốn: con đường kết quả là dưới một vị trí an toàn. – Cheekysoft