返回

禁用 IIS OPTIONS 方法:安全配置方案详解

windows

禁止IIS中的OPTIONS方法

在Web服务安全配置中,禁用不必要的HTTP方法是常见的做法。 OPTIONS 方法用于查询服务器支持的HTTP方法, 虽然自身不会直接带来安全风险,但暴露服务器信息可能成为潜在攻击者的跳板。在某些极简配置的Windows环境中,直接通过IIS管理器或修改 web.config 文件的方式可能受限。 此处,将介绍几种在这些情况下禁用 OPTIONS 方法的有效方案。

使用HTTP筛选规则

HTTP 筛选规则提供了一种无需额外安装IIS功能组件或修改 web.config 文件即可管控HTTP请求的方式。

操作步骤:

  1. 打开 命令提示符 或者 PowerShell 窗口 (需要管理员权限)。

  2. 输入以下命令以添加筛选规则:

    netsh http add urlacl url=https://+:80/ user=Everyone
    netsh http add urlacl url=http://+:80/ user=Everyone
    netsh http delete urlacl url=https://+:80/ user=Everyone sddl='D:(A;ID;FA;;;WD)'
    netsh http delete urlacl url=http://+:80/ user=Everyone sddl='D:(A;ID;FA;;;WD)'
    netsh http add urlacl url=https://+:443/ user=Everyone
    netsh http add urlacl url=http://+:443/ user=Everyone
    netsh http delete urlacl url=https://+:443/ user=Everyone sddl='D:(A;ID;FA;;;WD)'
    netsh http delete urlacl url=http://+:443/ user=Everyone sddl='D:(A;ID;FA;;;WD)'
    
    netsh http add rule name="Disable Options" url=http://+:80/* verb=OPTIONS action=reject rejectreason=405
    netsh http add rule name="Disable Options" url=https://+:80/* verb=OPTIONS action=reject rejectreason=405
    netsh http add rule name="Disable Options" url=http://+:443/* verb=OPTIONS action=reject rejectreason=405
    netsh http add rule name="Disable Options" url=https://+:443/* verb=OPTIONS action=reject rejectreason=405
    
    
  • netsh http add urlacl ...: 该命令用于在特定端口和路径上为指定用户授予访问权限(此例中端口为80和443)。 这一步的删除是为了防止之前的残留配置规则生效。
  • netsh http add rule ...: 这行命令的关键是创建了一条针对 OPTIONS 方法的规则。当服务器收到OPTIONS请求时,将以 405 错误代码(Method Not Allowed)拒绝。这里也确保对端口80和443的 HTTP 和HTTPS都进行设置。
  1. 重启 HTTP.sys 服务。虽然部分情况下上述命令已经足够,为保险起见可执行此步骤:
     net stop http
     net start http
    

上述命令通过筛选机制直接拒绝请求,无需依赖IIS的功能。 这适用于对系统进行极简化配置的场景,或者希望更低层次的 HTTP 控制,不安装IIS时非常有用。

使用服务器级别的HTTP处理模块 (进阶方案)

假如后续需要, 或者当前允许,使用ISAPI过滤器模块是一种功能更强大、也更加灵活的方式。

操作步骤:

  1. 安装必要的 IIS 模块:即使当前不启用整个 IIS 服务,某些核心的 HTTP 处理模块可以单独安装,而不用开启全功能IIS。需要启用 IIS Hostable Web Core 。可以通过 PowerShell 管理工具来安装此特性:
 Enable-WindowsOptionalFeature -Online -FeatureName IIS-HostableWebCore
  1. 开发自定义的ISAPI过滤器:使用任何一种编程语言 (如 C++,C#) 来创建符合 ISAPI 规范的 DLL 文件。这个DLL 的目标就是检测所有的 OPTIONS 方法, 并且拒绝访问。 具体实现代码略。

  2. 将编译好的 ISAPI 过滤器 DLL 文件部署到合适的位置。 例如 C:\ISAPIFilters

  3. 使用命令行工具注册此模块:

appcmd set config /section:system.webServer/isapiFilters /+"[name='My Options Filter', path='C:\ISAPIFilters\MyFilter.dll', enabled='true']"
```
  • appcmd:是 IIS 的命令行管理工具, 此处用于配置ISAPI过滤器。name 参数定义此过滤器的名称,path 参数指定 DLL 的位置。 启用此模块使其生效。
  1. 重启HTTP.SYS 服务或涉及IIS组件,生效配置,确认更改已生效:
 net stop http
 net start http
 iisreset

这种方法允许更加精细化的 HTTP 请求控制。ISAPI 过滤器可以在早期阶段处理请求,并对HTTP请求做出各种调整和筛选,不仅仅限于OPTIONS。当然,该方案也依赖 IIS 可托管核心组件 (IIS-HostableWebCore)。

安全建议

  • 保持最小权限原则: 仅开启实际需要的HTTP方法。 常见的HTTP方法,如 GETPOST 较为常用。PUTDELETE 如果没有特定的应用需求,通常也应该禁用。

  • 定期审查安全策略: 定期检查系统设置和规则,确保其与当前安全要求保持一致。 这有助于避免配置过期导致的安全风险。

  • 日志监控: 定期监控服务器日志,查找可疑请求模式。 例如大量 OPTIONS 方法请求可能预示着攻击。

总结

禁用IIS的OPTIONS 方法对于提升 Web 应用的安全态势非常重要。上述两种方式提供可供选择的方案。无论采用哪种方案,都应该依据当前实际环境,仔细权衡各项配置和安全风险,来选择最合适的方案。记住,安全是一个持续的过程,需要不断调整以适应新的威胁。