Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 如何在ModSecurity中跳过路径中参数的某些规则?_Apache_Security_Mod Security - Fatal编程技术网

Apache 如何在ModSecurity中跳过路径中参数的某些规则?

Apache 如何在ModSecurity中跳过路径中参数的某些规则?,apache,security,mod-security,Apache,Security,Mod Security,我做了一系列的研究,发现了很多东西,但还没能确定一些我需要的东西。首先,我在CentOS 7服务器上运行ModSecurity 2.7.3 目标 我希望能够扫描除某些参数外的所有参数,并通过已设置的所有标准核心规则运行它们。例如,如果我有一个文件path/to/myfile.php,它有两个参数被发送到它param1和param2。当用户点击myfile.php时,我希望它能对param1和param2运行所有可爱的检查,除了param2之外,我不需要它检查WEB\u攻击/XSS,因为它应该期望

我做了一系列的研究,发现了很多东西,但还没能确定一些我需要的东西。首先,我在CentOS 7服务器上运行ModSecurity 2.7.3

目标 我希望能够扫描除某些参数外的所有参数,并通过已设置的所有标准核心规则运行它们。例如,如果我有一个文件
path/to/myfile.php
,它有两个参数被发送到它
param1
param2
。当用户点击
myfile.php
时,我希望它能对
param1
param2
运行所有可爱的检查,除了
param2
之外,我不需要它检查
WEB\u攻击/XSS
,因为它应该期望该字段有一些HTML(或其他内容)

警告 我不认为我可以通过ID删除规则(除非我的理解有缺陷)。我们目前正在一台临时服务器上设置此功能,然后我们将在临时服务器上安装ModSecurity和我们已设置的排除项,并将它们复制到实时服务器。我不认为规则ID会与登台时的日志相匹配(同样,除非我误解了什么),在我们的实时服务器上抛出ModSecurity并等待规则开始跳闸也不会“有趣”

到目前为止我得到了什么 这是我试过的


安全引擎关闭#我知道这太糟糕了
这是个坏主意,所以我可以这么做


SecRuleRemoveByTag“WEB_攻击/XSS”#更好,但……仍然不够接近
因此,我尝试了以下内容,但没有成功:

SecRule参数|!ARGS:param2“@detectTXSS”#仅2.8.0及以上版本:(
#或
SecRule ARGS |!ARGS:param2“ctl:ruleRemoveByTag=WEB_攻击/XSS”
#或
SecRule REQUEST_FILENAME“@streq/path/to/myfile.php”pass,ctl:ruleRemoveByTag=WEB_ATTACK/XSS;ARGS:param2
ModSecurity的文档很好,但我需要更深入的理解,尤其是对东西的理解。我还研究了一些其他问题,并在网上看到了一些帖子,这些帖子帮助我朝着正确的方向发展(写得很好),以及

加分
如果我需要执行param2和param3,我是否需要编写两个规则,或者它们是否可以以某种方式组合起来(
ARGS:param2,param3
)?

您对ids的理解是有缺陷的。规则ID在登台时应该与在直播时相同,除非您对它们运行不同的规则(如果不是live的真实写照,那么哪种类型的规则会破坏登台服务器的功能呢)。大多数人下载、购买或编写一个规则集,其中OWASP核心规则集是一个流行的(并且是免费的!)规则集

有一个与您在链接到但使用ID的中要执行的操作几乎相同的示例:

# white-list the user parameter for rule #981260 when the REQUEST_URI is /index.php
 SecRule REQUEST_URI "@beginsWith /index.php" "phase:1,t:none,pass, \
  nolog,ctl:ruleRemoveTargetById=981260;ARGS:user
因此,对您来说,这将成为:

SecRule REQUEST_URI "@beginsWith /path/to/myfile.php" "id:1234,phase:2,t:none,pass, \
  nolog,ctl:ruleRemoveTargetById=973336;ARGS:param2
请注意,OWASP CRS(不确定您是否正在使用它?)XSS检查是第2阶段检查,因此我更改了该检查,并且ID从2.7开始是强制性的。您可以将其扩展为包括许多规则ID或不同的参数:

SecRule REQUEST_URI "@beginsWith /path/to/myfile.php" "phase:2,t:none,pass, \
  nolog,ctl:ruleRemoveTargetById=973336;ARGS:param2,\
  ctl:ruleRemoveTargetById=973337;ARGS:param2,\
  ctl:ruleRemoveTargetById=973338;ARGS:param2,\
  ctl:ruleRemoveTargetById=973336;ARGS:param3
但是,设置所有ID有点单调乏味,因此,如果您想通过标记进行设置,您可以尝试以下方法,尽管这些方法未经测试,但应该可以正常工作:

SecRule REQUEST_URI "@beginsWith /path/to/myfile.php" "id:1234,phase:2,t:none,pass, \
  nolog,ctl:ruleRemoveTargetById="OWASP_CRS/WEB_ATTACK/XSS";ARGS:param2
请注意,OWASP CRS标记实际上是
“OWASP\u CRS/WEB\u ATTACK/XSS”
,而不仅仅是
“WEB\u ATTACK/XSS”
,并且不确定它是否匹配部分位,因此在假设您使用的规则集的情况下,将全文放入

同样,如果您确实希望类似地将param3列为白名单,则可以在此行中有多个
ctl
操作

如果这些都不起作用,您可以使用链式规则代替ctl操作:

SecRule REQUEST_URI "@beginsWith /path/to/myfile.php" "id:1234,phase:2,t:none,pass,chain \
     SecRuleUpdateTargetByTag "OWASP_CRS:WEB_ATTACK/XSS" !ARGS:param2
这允许检查多个项目,并且如果没有等效的
ctl
命令(虽然
ctl
似乎可以处理大多数事情),您还可以访问所有ModSecurity规则命令。尽管这些要求每个参数有一条链式规则

重要注意事项:顺序很重要且容易混淆。SecRuleUpdateTargetByTag应在其修改的规则之后指定,但ctl修正需要在其修改的规则之前指定

还应注意,Location和LocationMatch不适用于阶段1规则(因为这些规则是在Apache运行Location和LocationMatch逻辑之前处理的)所以出于这个原因,我更喜欢使用ModSecurity REQUEST_URI,即使对于第2阶段和以上的规则,为了一致性,尽管它们应该在Location和LocationMatch部分工作

最后,您可以(而且应该!)将您的live server上的ModSecurity最初设置为DetectionOnly模式,这样它将记录所有违规行为,但不会阻止它们:

SecRuleEngine DetectionOnly
然后,当您微调规则时,您将看到误报率下降,直到您能够完全打开它为止


顺便说一句,我可以强烈推荐由ModSecurity的原作者在他离开之前写的。自从ModSecurity 2.6以来没有更新过,但是,除了id成为强制性之外,它涵盖的所有内容仍然是相关的,并且会给你在ModSecurity中打下良好的基础,然后你可以查看ModSecurity发行说明(无论是在安装中还是在安装中)查看更改了什么。还建议您升级到最新版本(2.9.1),因为自2.7.3以来已修复了不少错误。

我将对此答案进行一百万次的升级,但我不会这样做。非常感谢您提供的非常详细的答案。:)为什么感谢您!让这一切都值得一试:-)您在一些尝试中非常接近,确实需要一些时间来适应,但真正喜欢您可以用它做什么-一旦您习惯了,也就是:-)一旦您克服了最初微调的痛苦:-(