我正在使用PHP实现一个简单的目录列表脚本。
在打开目录句柄并随意echo
结果之前,我希望确保传递的路径是安全的。
$f = $_GET["f"];
if(! $f) {
$f = "/";
}
// make sure $f is safe
$farr = explode("/",$f);
$unsafe = false;
foreach($farr as $farre) {
// protect against directory traversal
if(strpos($farre,"..") != false) {
$unsafe = true;
break;
}
if(end($farr) != $farre) {
// make sure no dots are present (except after the last slash in the file path)
if(strpos($farre,".") != false) {
$unsafe = true;
break;
}
}
}
这样做足以确保用户发送的路径是安全的吗?还是说我需要采取其他措施来防止攻击?