【问题标题】:Why shouldn't we allow body in a GET or HEAD request?为什么我们不应该在 GET 或 HEAD 请求中允许 body?
【发布时间】:2020-03-30 20:01:34
【问题描述】:
我是从 InfoSec 方面而不是 AppDev 方面来讨论这个问题的,我只是想先说明这一点。问题是我的 WAF 使用响应阻止了某些图像,HTTP 协议合规性失败:GET 或 HEAD 请求中的正文。我需要证明保持这条规则有效,所以我作为非开发者问:
- 这是因为 GET 和 HEAD 请求的规则而被阻止,还是我们可以在 GET 和 HEAD 请求中允许 Body,但这真的不是一个好主意?
- 为什么这不是一个好主意?在 GET 或 HEAD 请求中允许 Body 会产生哪些潜在问题?
提前感谢大家的帮助。
【问题讨论】:
标签:
http
get
head
f5
web-application-firewall
【解决方案1】:
GET 和 HEAD 不发送请求正文,只有 POST 和 PUT 发送(参见 RFC 2616)
正如我经常看到的那样,您被阻止的另一个原因是请求标头之一 Content-Length 或 Transfer-Encoding 如果确实没有请求正文,则可以容忍全部(内容长度:0)。当 WAF 找到这些标头时,它会将请求视为具有主体,即使大小为 0。
- 如果您放松策略,您将允许合法流量,但也会为 GET/PUT 上的异常流量打开大门。为了避免这种情况,您可以添加 iRule 或 LTM 策略来删除 GET/PUT 上的标头,直到 F5 发布更好的软件版本,以便在正文大小为 0 时不阻塞流量。
- 当有漏洞的 Web 服务器缓冲在 GET/HEAD 正文中发送的数据而不是返回 400 错误并忽略数据时,就会出现潜在问题。这些数据可能会导致内存消耗,或者将黑客的数据注入到合法用户的请求中,此时结果未知。如果您对自己的 Web 服务器有信心,可以放宽 WAF 政策。