绿盟扫描报OPTIONS漏洞手把手教你用requestFiltering保护IIS网站最近不少使用IIS服务器的运维人员反馈绿盟等安全扫描工具频繁报告OPTIONS方法启用漏洞。这个看似简单的警告背后其实隐藏着服务器信息泄露的风险。作为网站管理员你可能既不想过度配置影响业务又需要通过合规检测。本文将带你深入理解OPTIONS方法的潜在风险并手把手教你如何通过requestFiltering模块精准控制HTTP方法既修复漏洞又不影响正常业务。1. 为什么OPTIONS方法会被标记为漏洞OPTIONS是HTTP/1.1协议定义的标准方法之一它本意是让客户端查询服务器支持哪些HTTP方法。当你在浏览器地址栏输入URL时通常使用的是GET方法提交表单时常用POST方法而OPTIONS方法则很少被普通用户直接使用。看似无害的OPTIONS方法为何会被安全扫描工具标记问题出在它可能暴露的服务器信息上服务器支持的HTTP方法列表可能包含PUT、DELETE等危险方法服务器类型和版本信息自定义的HTTP头支持情况CORS跨域资源共享策略细节这些信息看似无关紧要但攻击者可以利用它们先通过OPTIONS探测服务器支持的方法发现支持PUT方法后尝试上传恶意文件发现支持DELETE方法后尝试删除重要资源根据服务器版本查找已知漏洞!-- 典型的OPTIONS请求响应示例 -- HTTP/1.1 200 OK Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE Server: Microsoft-IIS/10.0 X-Powered-By: ASP.NET2. requestFiltering模块深度解析IIS的requestFiltering模块是一个强大的安全防护层它可以在请求到达应用前进行过滤。这个模块提供了多种防护机制功能作用配置位置动词过滤控制允许的HTTP方法system.webServer/security/requestFiltering/verbs文件扩展名过滤限制可访问的文件类型system.webServer/security/requestFiltering/fileExtensionsURL序列规则防止目录遍历攻击system.webServer/security/requestFiltering/alwaysAllowedUrls请求头限制控制请求头大小和内容system.webServer/security/requestFiltering/requestLimits为什么选择requestFiltering而不是其他方案性能影响小在IIS内核层过滤比应用层拦截更高效配置简单只需修改web.config无需重启服务器粒度可控可以精确到每个HTTP方法兼容性好从IIS7开始全面支持3. 实战配置requestFiltering禁用OPTIONS方法现在我们来解决实际问题如何通过requestFiltering禁用OPTIONS方法。以下是详细步骤定位web.config文件对于整个站点编辑站点根目录下的web.config对于特定应用编辑应用目录下的web.config修改或添加requestFiltering配置?xml version1.0 encodingUTF-8? configuration system.webServer security requestFiltering verbs allowUnlistedfalse add verbGET allowedtrue/ add verbPOST allowedtrue/ add verbHEAD allowedtrue/ !-- 明确列出所有允许的方法 -- /verbs /requestFiltering /security /system.webServer /configuration注意allowUnlistedfalse表示只允许显式列出的方法其他方法一律拒绝。这是最安全的配置方式。验证配置是否生效使用curl命令测试curl -X OPTIONS http://yoursite.com -I预期结果应该是405 Method Not Allowed而不是200 OK。4. 高级配置与最佳实践4.1 针对不同场景的配置策略根据你的业务需求可以选择不同的安全策略策略一白名单模式推荐verbs allowUnlistedfalse add verbGET allowedtrue/ add verbPOST allowedtrue/ !-- 只添加业务必需的方法 -- /verbs策略二黑名单模式verbs allowUnlistedtrue add verbOPTIONS allowedfalse/ add verbPUT allowedfalse/ add verbDELETE allowedfalse/ !-- 只禁用危险的方法 -- /verbs策略三混合模式verbs allowUnlistedfalse add verbGET allowedtrue/ add verbPOST allowedtrue/ /verbs deniedVerbs add verbTRACE/ !-- 额外禁止的方法 -- /deniedVerbs4.2 处理特殊场景如果你的网站需要支持CORS跨域资源共享OPTIONS方法是预检请求必需的。这时不能简单禁用OPTIONS而应该保持OPTIONS方法启用配置精确的CORS策略限制OPTIONS方法只返回必要信息system.webServer httpProtocol customHeaders add nameAccess-Control-Allow-Methods valueGET, POST/ !-- 明确允许的方法 -- /customHeaders /httpProtocol /system.webServer4.3 监控与维护配置完成后还需要定期检查web.config文件的完整性监控服务器日志中的405错误在升级应用时重新评估HTTP方法需求使用安全扫描工具定期验证配置效果5. 常见问题与解决方案Q配置后网站部分功能无法使用怎么办A按以下步骤排查检查浏览器开发者工具中的网络请求看哪些方法被阻止临时启用allowUnlistedtrue确认问题是否解决将缺失的方法添加到允许列表联系应用开发者确认方法使用情况Q如何批量管理多个站点的配置A可以使用IIS管理器的功能在服务器级别设置默认规则通过配置编辑器导出导入设置使用PowerShell自动化配置# 为所有站点添加OPTIONS方法限制 Get-Website | ForEach-Object { $config Get-WebConfiguration -Location $_.Name -Filter system.webServer/security/requestFiltering/verbs $config.allowUnlisted $false $config.Add(add, {verbOPTIONS;allowed$false}) $config | Set-WebConfiguration }Q除了requestFiltering还有哪些加固措施移除不必要的HTTP头如X-Powered-By启用动态IP限制配置请求大小限制定期更新IIS和Windows补丁在实际项目中我发现很多管理员只关注高危漏洞却忽视了OPTIONS方法这类低风险问题。但安全就像链条最薄弱的环节决定整体强度。一次全面的方法限制配置可能阻止未来多种潜在攻击。