【问题标题】:appengine allow only http requests from local applicationappengine 只允许来自本地应用程序的 http 请求
【发布时间】:2015-04-15 03:23:47
【问题描述】:

我想确保我的一个 appengine 处理程序仅在请求来自本地应用程序时才响应。

我查看了 handler.request.environ,这是我发现的(我修改了 application_id):

{
    'USER_ORGANIZATION': '',
    'TZ': 'UTC',
    'APPLICATION_ID': 'dev~myappid',
    'USER_NICKNAME': '',
    'REMOTE_ADDR': '127.0.0.1',
    'DEFAULT_VERSION_HOSTNAME': 'localhost:8080',
    'CURRENT_MODULE_ID': 'default',
    'wsgi.multithread': True,
    'REQUEST_METHOD': 'GET',
    'DATACENTER': 'us1',
    'wsgi.run_once': False, 
    'REQUEST_ID_HASH': '364BD75E', 
    'QUERY_STRING': '', 
    'USER_IS_ADMIN': '0', 
    'SERVER_SOFTWARE': 'Development/2.0', 
    'REQUEST_LOG_ID': '21f8fe9ca3baeebdacc5dd74febb7aec00a6d6bedbc8dc01415c58393ee7a2cedd155b81e75db18961c98b8ee8cb5dd42', 
    'PATH_TRANSLATED': '/Users/hamish/dev/kp3/src/kp3/main.pyc', 
    'SERVER_NAME': 'localhost', 
    'SERVER_PROTOCOL': 'HTTP/1.1', 
    'AUTH_DOMAIN': 'gmail.com', 
    'SCRIPT_NAME': '', 
    'HTTP_USER_AGENT': 'Python-urllib/2.7 AppEngine-Google; (+http://code.google.com/appengine)', 
    'PATH_INFO': '/spike/two/', 
    'wsgi.multiprocess': True, 
    'HTTP_HOST': 'localhost:8080', 
    'HTTPS': 'off', 
    'INSTANCE_ID': 'fd45d3ed33f7f9abb3bec923ede309eeb3b5', 
    'wsgi.version': (1, 0), 
    'wsgi.input': <_io.BytesIO object at 0x1055294d0>, 
    'SERVER_PORT': '8080', 
    'USER_EMAIL': '', 
    'APPENGINE_RUNTIME': 
    'python27', 
    'CURRENT_VERSION_ID': '1.699634115210300890', 
    'HTTP_X_APPENGINE_COUNTRY': 'ZZ', 
    'USER_ID': '', 
    'webob._cache_control': ('', <CacheControl ''>), 
    'wsgi.url_scheme': 'http'
}

这里(或请求处理程序上的其他位置)是否有任何东西可以让我确定(即攻击者无法伪造的东西)请求是否来自当前应用程序。

为什么要这样做?

我有一个应用程序将图像存储在 blob 商店中,然后允许批准的用户查看它们。我没有使用 blobstore 图像托管功能,而是收到请求,检查登录用户是否有权查看图片,获取 blob 并返回它。这工作正常。

我现在想生成一个包含其中一些图像的 PDF。我目前打算这样做是创建一些 xhtml,包括对图像的引用,然后使用 xhtml2pdf 创建 pdf。然后,我将存储它并使用与图像相同的安全规则来控制对 pdf 的访问。

xhtml2pdf 获取图像并将它们嵌入到 pdf 文件中。

如果我使用相同的 url 将图像提供给 xhtml2pdf,就像我将它们提供给普通用户一样,授权代码会阻止对 xhtml2pdf 的访问。为了解决这个问题,我实现了第二个图像处理程序,它没有基于用户的安全性。我现在的问题是保护第二个处理程序,以免出现安全漏洞。

我尝试用来解决此问题的另一种方法是使用 Data URI 方案将图像数据直接嵌入到 html 中,但是我也遇到了错误:

IOError: cannot identify image file fileName=<StringIO.StringIO
instance at 0x10503ca70>

【问题讨论】:

    标签: python google-app-engine pdf webapp2


    【解决方案1】:

    如果您不使用自定义域,您可以use this。 X-Appengine-Inbound-Appid 只能在内部设置,因此可以安全地用作安全检查。

    【讨论】:

    • 我目前正在使用自定义域,但我当然可以修改 html 以使用 .appspot 域。这对我有用。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2021-05-24
    • 2017-02-05
    • 1970-01-01
    • 2021-01-03
    • 2020-10-18
    相关资源
    最近更新 更多