在代码中检测到路径遍历漏洞

时间:2020-01-02 18:32:25

标签: python python-2.7

我有以下代码:

    def download_package(self, dist_dir):
        safe_list = ["prod","staging"]
        prod_dir = 'prod'
        staging_dir = 'staging'
        kp_dir = os.path.join(dist_dir, 'key_protect')
        for dir_name in [prod_dir, staging_dir]:
            try:
                if dir_name in safe_list:
                    my_dir = os.path.join(kp_dir, dir_name)
                os.makedirs(my_dir)
            except OSError, e:
                if e.errno == os.errno.EEXIST:
                    print("Target directories exist %s" % my_dir)   

当我使用HCL应用程序扫描此代码时,它能否指出我在第my_dir = os.path.join(kp_dir, dir_name)行出现问题,而在kp_dir = os.path.join(dist_dir, 'key_protect')上未检测到问题,就安全性而言,我不确定该代码中存在什么问题。扫描表明此代码受到路径遍历攻击。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我不确定HCL应用程序如何工作,但是问题是由于该函数接受一个dist_dir参数,该参数随后用于发出副作用产生命令(即os.makedirs()) 。 有关此类攻击的更多信息,请参见Wikipedia entry

很有可能,此问题仅由第二次os.path.join()触发,因为第二次os.makedirs()调用(而不是第一次)的结果调用了os.path.join()

为防止该漏洞,您应清除dist_dir的内容。


例如,您可能会做类似的事情:

def download_package(self, dist_dir):
    if '../' not in dist_dir and '/..' not in dist_dir and '..' != dist_dir:
        prod_dir = 'prod'
        staging_dir = 'staging'
        kp_dir = os.path.join(dist_dir, 'key_protect')
        for dir_name in [prod_dir, staging_dir]:
            try:
                my_dir = os.path.join(kp_dir, dir_name)
                os.makedirs(my_dir)
            except OSError, e:
                if e.errno == os.errno.EEXIST:
                    print("Target directories exist %s" % my_dir)
相关问题