gpt4 book ai didi

javascript - 从客户端到服务器上的真实路径的虚拟路径

转载 作者:行者123 更新时间:2023-12-01 15:51:00 24 4
gpt4 key购买 nike

客户端应该只看到服务器上的目录及其内容( FS_ROOT )。
服务器应该将从客户端接收到的路径转换为存在的真实路径,并执行客户端请求的文件操作:
我制作了这两个函数来处理这个问题,我想问一下它们是否足够安全。我的意思是客户端应该没有办法欺骗服务器在 FS_ROOT 之外做一些事情

  function fromVirtualPath(virtPath){
if(virtPath === '/' || virtPath === '.')
return FS_ROOT;

virtPath = virtPath.trim();

if(virtPath[0] === '/')
virtPath = virtPath.substr(1);

const absPath = path.resolve(FS_ROOT, virtPath);

if(absPath.indexOf(FS_ROOT) !== 0)
throw new Error('Outside root dir - no permissions!');

return absPath;
}

function toVirtualPath(absPath){
return '/' + path.relative(FS_ROOT, absPath);
}
示例真实路径: /www/site.com/public_html/yo客户应该看到: /yo

最佳答案

关于 fromVirtualPath我会简单地移动这条线 virtPath = virtPath.trim();成为函数的第一行,然后就可以了。
如果值传递给 toVirtualPath总是返回值 fromVirtualPath ,是的,它足够安全;否则我们可以检查该值是否是一个好的 absPath。

function fromVirtualPath(virtPath) {
virtPath = virtPath.trim();

if (virtPath === '/' || virtPath === '.')
return FS_ROOT;

if (virtPath[0] === '/')
virtPath = virtPath.substr(1);

const absPath = path.resolve(FS_ROOT, virtPath);

if (absPath.indexOf(FS_ROOT) !== 0)
throw new Error('Outside root dir - no permissions!');

return absPath;
}

function toVirtualPath(absPath) {
if (absPath.indexOf(FS_ROOT) !== 0)
throw new Error('Bad absolute path!');

return '/' + path.relative(FS_ROOT, absPath);
}

关于javascript - 从客户端到服务器上的真实路径的虚拟路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63440210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com