确保用户定义的路径在 PHP 中是安全的
-
21-08-2019 - |
题
我正在 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;
}
}
}
这是否足以确保用户发送的路径是安全的,或者我还应该采取其他措施来防止攻击?
解决方案
可能是这样 realpath()
对你有帮助。
realpath()
扩展所有符号链接,并将参考转移到'/./'
,'/../'
和额外的'/'
输入路径中的字符,并返回规范化的绝对路径名。
但是,该函数假设所讨论的路径确实存在。它不会对不存在的路径执行规范化。在这种情况下,返回 FALSE。
不隶属于 StackOverflow