我想规范化来自外部资源的路径以防止目录遍历攻击。我知道 realpath()函数,但遗憾的是这个函数只返回现有目录的路径。因此,如果该目录(还)不存在,则 realpath() 函数会切断不存在的整个路径部分。
所以我的问题是:你知道一个只规范化路径的 PHP 函数吗?
PS:我也不想提前创建所有可能的目录;-)
最佳答案
没有用于此的内置 PHP 函数。请改用如下内容:
function removeDots($path) {
$root = ($path[0] === '/') ? '/' : '';
$segments = explode('/', trim($path, '/'));
$ret = array();
foreach($segments as $segment){
if (($segment == '.') || strlen($segment) === 0) {
continue;
}
if ($segment == '..') {
array_pop($ret);
} else {
array_push($ret, $segment);
}
}
return $root . implode('/', $ret);
}
关于PHP:规范化不存在目录的路径以防止目录遍历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10064499/