我在 Windows Server 2012 VM 上安装了 ModSecurity IIS 模块。我有一个简单的测试应用程序在其自己的应用程序池上运行。
默认.aspx-- 只是一个显示日期/时间的简单页面。
网页配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<ModSecurity enabled="true" configFile="C:\inetpub\wwwroot\modsecurity.conf" />
</system.webServer>
</configuration>
修改安全配置文件
SecRuleEngine On
SecRule ARGS:testparam "test" "id:1234,deny,status:403,msg:'Our test rule has triggered'"
当我浏览该网站时(例如http://localhost?testparam=test),我看到的是测试页面而不是 403。事件查看器中没有记录任何内容。
答案1
您很可能就是这个问题的受害者:https://github.com/SpiderLabs/ModSecurity/issues/787
Broco 的答案很接近,但它没有引起人们对最重要的部分的注意:overrideModeDefault="Allow"
。如果你检查你的 C:\Windows\System32\inetsrv\Config\applicationHost.config 文件,你可能会看到
<section name="ModSecurity" overrideModeDefault="Deny" allowDefinition="Everywhere" /></sectionGroup>
这需要更改为“允许”,否则添加<ModSecurity ...>
到您网站的配置文件实际上只会禁用 ModSecurity。
答案2
您是否编辑了 C:\Windows\System32\inetsrv\config?您必须通过添加以下文件来启用 modsecurity:
<section name="ModSecurity" overrideModeDefault="Allow" allowDefinition="Everywhere" /></sectionGroup>
此外,你的配置文件永远不应该曾经位于您的 wwwroot 中。将其放在安全的地方,例如:
configFile="C:\Program Files\ModSecurity IIS\modsecurity_iis.conf"
另请注意,根据文档,该文件在 Windows 上应被称为 modsecurity_iis.conf。