PHP:规范化不存在目录的路径以防止目录遍历?

标签 php path normalize directory-traversal

我想规范化来自外部资源的路径以防止目录遍历攻击。我知道 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/

相关文章:

java - Java 中的规范化/取消重音文本

安卓:sqlite:游标:getColumnIndex

python - sklearn.linear_model RidgeCV normalize= 参数到底是做什么的

php - 从数据库中选择随机表

python - Python2 的 sys.path 在 Windows 中究竟是如何设置的?

PHP 数组搜索返回多个键

java - 从当前包中获取文件

python - "dot.exe"在路径中找不到。 Python 上的 Pydot (Windows 7)

php - PHP 与 DWT 的争论

PHP:使用变量从数据库检索图像。显示损坏的图像图标