我需要检查特定网站的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:
通常最好是将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
确保以下内容:
SecRequestBodyAccess On
尝试使用“审计日志”而不是“日志”
如果您有自定义的SecAuditLogParts,请确保它包含请求主体