修补目录遍历攻击漏洞
#python #安全 #serverless #alibabacloud

日期:2023-07-15

考虑我的个人网站中的以下组件,负责将OSS存储库的静态Web资产提供给用户。

Function assets

subPath可能包含零或更多路径组件。 bucket donaldsebleung-assets位于函数assets中的容器文件系统中的/mnt/donaldsebleung-assets/下方,该函数将请求路径subPath附加到安装点,以便从存储桶中获取关联的对象并将其内容返回给启动请求的用户。

供参考,assets函数的原始源代码如下所示。

import os, re

def handler(environ, start_response):
    path_info = environ['PATH_INFO']
    local_path = os.path.join('/mnt/donaldsebleung-assets/', path_info[1:])
    local_file_exists = os.path.isfile(local_path)
    if not local_file_exists:
        status = '404 Not Found'
        response_headers = [('Content-Type', 'text/plain')]
        start_response(status, response_headers)
        return [status]
    with open(local_path, 'rb') as local_file:
        contents = local_file.read()
        status = '200 OK'
        content_type = 'application/octet-stream'
        is_css = re.compile(r'\.css$').search(local_path)
        if is_css:
            content_type = 'text/css'
        is_png = re.compile(r'\.png$').search(local_path)
        if is_png:
            content_type = 'image/png'
        is_jpeg = re.compile(r'\.jpe?g$').search(local_path)
        if is_jpeg:
            content_type = 'image/jpeg'
        response_headers = [('Content-Type', content_type)]
        start_response(status, response_headers)
        return [contents]

该函数的预期行为是它应该仅 使用请求路径subPath从bucket donaldsebleung-assets获取关联的对象并将其内容返回给请求用户 - 该功能切勿返回内容从容器文件系统的其他部分,例如位于/code/index.py的功能源代码,应不惜一切代价隐藏。

现在想象您是一个恶意演员,要获取位于/code/index.py的源代码并将其披露给公众。如果可能的话,您将如何欺骗该功能返回其源代码? 提示:标题中; - )

继续在donaldsebleung.com

上阅读