我可以在ModSecurity中使用什么规则来logging特定站点的POST负载?

我需要检查特定网站的POST有效负载(服务器相当繁忙,我不会打开整个服务器的POST日志logging)。

该服务器是LiteSpeed 5.0.7。 SecRequestBodyAccess被设置为“On”。

首先,我尝试了一系列的规则:第一个阶段:第一阶段只匹配我想要的主机的请求,但后期有效载荷处于第二阶段,我不认为我可以在两个不同的阶段做连锁。

然后我试着用这个:

SecRule REQUEST_METHOD“POST”“phase:2,log,id:22222223

但是它没有在modsec_audit.log中logging任何内容。

我是否做错了什么,或者它与Lite与Lite Mod的兼容性?

最后我也试过这个规则来logging所有请求的POST:SecRule REQUEST_METHOD“POST”“id:22222224,phase:2,ctl:auditEngine = On,log,pass”。

它logging请求但不是请求体(在modsec审计中缺less-C–组si)。

类似于这个问题: 如何让mod_securitylogging所有POST数据?

你是正确的,你不能在两个不同的阶段链接两个规则,但是阶段2可以访问所有阶段1的信息,所以如果你想这样做,就把它移到阶段2。

你给的这个规则:

SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223 

有点毫无意义。 这将logging(在主日志中)收到POST请求,但没有POST正文。

它还将根据您的SecAuditEngine值设置为什么login到AuditEngine:

  1. 如果将SecAuditEngine设置为On,则将所有内容都logging到审计日志中,而不需要上述规则。 这会快速填充日志文件,因此不推荐使用。
  2. 如果你将SecAuditEngine设置为RelevantOnly,那么它也会在这里login。
  3. 如果SecAuditEngine设置为Off,则永远不会将其logging到审计日志中。

通常最好是将SecAuditEngine设置为RelevantOnly(我怀疑它是已经存在的),但是如果没有设置,那么正文可能不会被logging到AuditLog

也许更好的方法是用你使用ctl动作的其他规则:

 SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass" 

这会强制AuditEngine处于发布请求状态,即使AuditLog设置为Off。 这也会logging你已经开启了这个规则,把它变成没有必要或者没用的,所以我会把“log”改成“nolog”。 该请求仍将logging(因为auditEngine已设置为yes),但是执行该更改的此规则不会。 顺便说一句,当你使用ctl,这只会影响这个请求,所以AuditEngine将重置为下一个请求。

正如你所说,除非你没有C部分,否则这似乎工作。 这是用SecAuditLogParts设置的。 默认情况下,这包括C部分,所以猜这意味着你必须改变默认? 这有什么理由吗?

无论如何,你可以设置,包括C部分:

 SecAuditLogParts ABCFHZ SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass" 

或者,如果您只希望在此规则触发时loggingC部分,则可以将其作为规则的一部分来执行此操作:

 SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass" 

另外要注意的是,POST请求可以logging敏感数据(密码,信用卡号码,社会安全号码等等)。 不build议logging这些信息,也可能违反公司政策和/或您遵循的任何标准(例如,PCI合规性)。 因此build议设置清理规则来屏蔽这些数据。 详情请参阅https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#sanitiseArg

确保以下内容:

  1. SecRequestBodyAccess On

  2. 尝试使用“审计日志”而不是“日志”

  3. 如果您有自定义的SecAuditLogParts,请确保它包含请求主体