【发布时间】: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