gpt4 book ai didi

python - 对 AppEngine header 进行不区分大小写的比较是否安全?

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:33 25 4
gpt4 key购买 nike

AppEngine 对任务中的特定 header 做出一些保证。具体来说,一组 header ,例如 X-AppEngine-QueueName不能由用户设置。

These headers are set internally by App Engine: If an external user request attempts to set these headers, they are removed. Therefore, if your request handler finds any of these headers in a request, that task queue request is guaranteed to be valid.

看起来 GAE 提供的两个 Web 框架(webappwebapp2)都有继承自 webob.Request 的 Request 对象。不幸的是,据我所知,webob.Request 仅在 case-insensitive way 中公开 header 。 . AppEngine 是否保证用户无法以不区分大小写的方式提供这些请求 header ?

换句话说,用户能否在请求上设置一个X-AppEngine-Queuename header 并使其通过(此时,webob 将无法区分该 header 和 GAE 提供的真实 header )?

webapp2 框架中,如何保证我的请求源自任务而不是恶意用户的结果?

最佳答案

所以我做了一些实验,看起来 GAE 确实以不区分大小写的方式清理了 header (正如基于 RFC 7230 3.2 所预期的那样)。

对于任何对我的测试方法感兴趣的人,我首先将以下日志记录语句添加到我的 webapp2 请求处理程序中:

logging.info('request headers: %s', self.request.headers.items())
logging.info('request env: %s', list(self.request.headers.environ)

然后我在开发工具打开的情况下导航到我的 chrome 站点。我在“网络”选项卡中找到了我修改过的处理程序的请求。 Right clicking this gives the option to copy the request as cURL所以我这样做并将其粘贴到 shell 脚本中。然后我修改了复制的请求以删除所有 cookie(我不希望 GAE 将我识别为应用程序管理员)并添加一个 x-appengine-queuename: boom header 。我提交了 curl 请求并查看了我的日志。没有 x-appengine-queuename header 。我还添加了一个 x-appengine-mgilson: test header ,该 header 已通过。

从实现方面来看,环境具有所有大写 header (例如 self.request.headers.environ 具有所有大写键,只有少数异常(exception)均以 wsgi 开头。——类似于wsgi.run_once)。 header 都以 HTTP_ 为前缀——我猜这是某处某个标准的一部分……webob 去除了 HTTP_ 和当它在 self.request.headers 中查找值时,标题名称的其余部分会被大写(可能是为了遵守前面提到的 RFC,并提供更好的人类可读版本)。

关于python - 对 AppEngine header 进行不区分大小写的比较是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com