os.path.join函数

os.path.join()函数存在绝对路径拼接漏洞

绝对路径拼接漏洞

os.path.join(path,*paths)函数用于将多个文件路径连接成一个组合的路径。第一个函数通常包含了基础路径,而之后的每个参数被当作组件拼接到基础路径之后。

然而,如果拼接的某个路径以 / 开头,那么包括基础路径在内的所有前缀路径都将被删除,该路径将视为绝对路径

在Windows系统中,os.path.join()方法是由ntpath模块中的NTPath类实现的。

下面是NTPath类中os.path.join()方法的源码:

def join(self, *args):
    path = str(args[0])
    try:
        for arg in args[1:]:
            arg_str = str(arg)
            if arg_str.startswith(self.sep) or (
                    self.altsep and arg_str.startswith(self.altsep)):
                path = arg_str
            elif not path or path.endswith(self.sep) or (
                    self.altsep and path.endswith(self.altsep)):
                path += arg_str
            else:
                path += self.sep + arg_str
    except (TypeError, AttributeError, BytesWarning):
        genericpath._check_arg_types('join', *args)
        raise
    return path

下面是PosixPath类(POSIX系统)中os.path.join()函数的源码:(Linux系统一样的)

def join(self, *args):
    path = str(args[0])
    try:
        for arg in args[1:]:
            arg_str = str(arg)
            if arg_str.startswith(self.sep):
                path = arg_str
            elif not path or path.endswith(self.sep):
                path += arg_str
            else:
                path += self.sep + arg_str
    except (TypeError, AttributeError, BytesWarning):
        genericpath._check_arg_types('join', *args)
        raise
    return path

可以发现,如果我们传递的args变量中有以/开头的话(self.sep代表/),会直接将这个以/开头的字符串赋值给path,当然如果后续依然有以/开头的字符串的话,刚刚的就会被替换,并最终被return,也就造成绝对路径的拼接漏洞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值