ano*_*ard 7 php security user-input directory-traversal
我在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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是否足以确保用户发送的路径是安全的,还是我应该采取其他措施来防止攻击?
它可能realpath()对您有所帮助.
realpath()扩展所有的符号链接,并解析为引用'/./','/../'和额外的'/'输入路径中的字符,并返回规范化的绝对路径名.
但是,此函数假定所讨论的路径实际存在.它不会对不存在的路径执行canonization.在这种情况下,返回FALSE.