IIS限制动词未生效:HEAD请求仍可通过问题排查
问题分析与解决方案
IIS的requestFiltering模块有个默认行为:当你允许GET动词时,会自动隐含允许HEAD请求——因为HEAD请求的作用就是获取GET请求的响应头但不返回响应体,属于GET的附属语义,所以即使你没在配置里显式声明HEAD,只要开了GET,HEAD请求就会被放行。
要实现禁止HEAD请求返回403的预期效果,你需要显式添加HEAD动词并设置allowed="false",覆盖这个默认规则。修改后的web.config配置如下:
<configuration> <system.webServer> <security> <requestFiltering> <hiddenSegments> <remove segment="bin" /> </hiddenSegments> <verbs allowUnlisted="false"> <add verb="GET" allowed="true" /> <add verb="POST" allowed="true" /> <!-- 显式拒绝HEAD请求 --> <add verb="HEAD" allowed="false" /> </verbs> </requestFiltering> </security> </system.webServer> </configuration>
配置修改完成后,记得重启站点或者回收应用池让配置生效,此时再发送HEAD请求就会返回403 Forbidden错误了。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

