我想确保我的一个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。为了解决这个问题,我实现了第二个没有基于用户安全性的图像处理程序。我现在的问题是为了没有安全漏洞来保护第二个处理程序。
我试图用来解决这个问题的另一种方法是使用数据URI方案将图像数据直接嵌入到html中,但是我也遇到了错误:
IOError: cannot identify image file fileName=<StringIO.StringIO
instance at 0x10503ca70>