禁用 IIS OPTIONS 方法:安全配置方案详解
2025-01-12 11:07:07
禁止IIS中的OPTIONS方法
在Web服务安全配置中,禁用不必要的HTTP方法是常见的做法。 OPTIONS
方法用于查询服务器支持的HTTP方法, 虽然自身不会直接带来安全风险,但暴露服务器信息可能成为潜在攻击者的跳板。在某些极简配置的Windows环境中,直接通过IIS管理器或修改 web.config
文件的方式可能受限。 此处,将介绍几种在这些情况下禁用 OPTIONS
方法的有效方案。
使用HTTP筛选规则
HTTP 筛选规则提供了一种无需额外安装IIS功能组件或修改 web.config
文件即可管控HTTP请求的方式。
操作步骤:
-
打开
命令提示符
或者PowerShell
窗口 (需要管理员权限)。 -
输入以下命令以添加筛选规则:
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都进行设置。
- 重启 HTTP.sys 服务。虽然部分情况下上述命令已经足够,为保险起见可执行此步骤:
net stop http net start http
上述命令通过筛选机制直接拒绝请求,无需依赖IIS的功能。 这适用于对系统进行极简化配置的场景,或者希望更低层次的 HTTP 控制,不安装IIS时非常有用。
使用服务器级别的HTTP处理模块 (进阶方案)
假如后续需要, 或者当前允许,使用ISAPI过滤器模块是一种功能更强大、也更加灵活的方式。
操作步骤:
- 安装必要的 IIS 模块:即使当前不启用整个 IIS 服务,某些核心的 HTTP 处理模块可以单独安装,而不用开启全功能IIS。需要启用 IIS Hostable Web Core 。可以通过 PowerShell 管理工具来安装此特性:
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HostableWebCore
-
开发自定义的ISAPI过滤器:使用任何一种编程语言 (如 C++,C#) 来创建符合 ISAPI 规范的 DLL 文件。这个DLL 的目标就是检测所有的
OPTIONS
方法, 并且拒绝访问。 具体实现代码略。 -
将编译好的 ISAPI 过滤器 DLL 文件部署到合适的位置。 例如 C:\ISAPIFilters
-
使用命令行工具注册此模块:
appcmd set config /section:system.webServer/isapiFilters /+"[name='My Options Filter', path='C:\ISAPIFilters\MyFilter.dll', enabled='true']"
```
appcmd
:是 IIS 的命令行管理工具, 此处用于配置ISAPI过滤器。name
参数定义此过滤器的名称,path
参数指定 DLL 的位置。 启用此模块使其生效。
- 重启HTTP.SYS 服务或涉及IIS组件,生效配置,确认更改已生效:
net stop http
net start http
iisreset
这种方法允许更加精细化的 HTTP 请求控制。ISAPI 过滤器可以在早期阶段处理请求,并对HTTP请求做出各种调整和筛选,不仅仅限于OPTIONS。当然,该方案也依赖 IIS 可托管核心组件 (IIS-HostableWebCore)。
安全建议
-
保持最小权限原则: 仅开启实际需要的HTTP方法。 常见的HTTP方法,如
GET
,POST
较为常用。PUT
和DELETE
如果没有特定的应用需求,通常也应该禁用。 -
定期审查安全策略: 定期检查系统设置和规则,确保其与当前安全要求保持一致。 这有助于避免配置过期导致的安全风险。
-
日志监控: 定期监控服务器日志,查找可疑请求模式。 例如大量 OPTIONS 方法请求可能预示着攻击。
总结
禁用IIS的OPTIONS 方法对于提升 Web 应用的安全态势非常重要。上述两种方式提供可供选择的方案。无论采用哪种方案,都应该依据当前实际环境,仔细权衡各项配置和安全风险,来选择最合适的方案。记住,安全是一个持续的过程,需要不断调整以适应新的威胁。