OWASP website建议验证内容类型标头。但它并未指明相同的理性。即使我没有阅读或使用它,我应该验证内容类型标题的原因是什么?
当POSTing或PUTting新数据时,客户端将指定 内容类型(例如application / xml或application / json) 传入的数据。服务器永远不应该采用Content-Type;它 应始终检查Content-Type标头和内容 相同的类型。缺少Content-Type标头或意外 Content-Type标头应该导致服务器拒绝内容 406不可接受的回复。
答案 0 :(得分:2)
我想到的一个例子是跨站点ajax请求,很容易发送text/html
请求,该请求不会生成转机前请求,但applictaion/json
无法生成}。因此,如果您的服务具有期望json和更改服务器状态的POST操作,则可以在内容类型接受text/html
时利用CSRF,但如果application/json
有一些基本保护验证,因为如果对飞行前的响应没有明确允许CORS帖子,浏览器将不会从其他域发送请求。
因此,跨域ajax请求的某些属性取决于内容类型。我认为这可能是主要原因。
同样从更理论的角度来看,需要解析数据的格式。我无法想到实际的漏洞,但至少在理论上,尝试以错误的格式解析数据可能会导致错误的结果,解析的内容与它们应该是的不同。最好只是验证客户端实际上是在发送它声称的内容,以及它应该是什么。