所以,更新操作 需要重新列出操作标志。至少这是我对“只能出现一次的操作被覆盖”的理解。这对于大多数操作来说相当明显,但对于 ctl: 或专业参数来说则不那么明显。
我目前正在建造这个编辑器图形用户界面,所以我想知道原始 SecRule 中的哪些标志值得在 SecRuleUpdate 中重复。
除了“只能出现一次”之外,手册对标志类型的提示相对较少。例如,“操作组”(元数据、非/破坏性、流程、数据)没有完全传达哪些选项是重复/列表参数。所以现在我只是将所有可能的操作分类如下:
固定参数(无法更改):
- ID
- 阶段
- 链 (有点,因为它不应该被改变)
元数据(无需保留 IMO):
- 准确性、成熟度
- 修订版
- 严重性,标签
实际行动(布尔标志)
- 允许、阻止、通过、暂停、拒绝、删除、状态
- auditlog、noauditlog、nolog、日志、捕获
- skip、skipAfter、multiMatch、xmlns
- 信息
列出操作(→每个 SecRuleUpdateAction 不会添加两次):
t:***
(仅当存在 t:none 时才需要复制)- deprecatevar、expirevar、initcol、setenv、setvar、
不清楚:
- 日志数据
- setuid:、setrsc:、setsid: → 看起来像变量设置选项,因此可能会出现多次
sanitise***
- append:、prepend:、exec:、proxy:、redirect: → 不过我假设这些是单动作标志
ctl:***
所以logdata
实际上只是msg
选项的一个变体。但我不确定它是否不能出现多次(因此需要从 SecRuleUpdate 中省略…)。也许我只是被收集多个“匹配数据:…”条目的日志条目误导了,并且没有任何规则具有多个日志数据:…选项。
exec:
以及append:
诸如此类的东西我还没有真正在 CRS 规则 ( egrep 'setuid|setsid|prepend|exec:|proxy|redirect' /usr/share/modsecurity-crs/rules/*.conf
) 中看到使用过。而且我认为它们不是迭代的,而是单数的。另一方面,手册上说的是“无中断的”,所以严格来说,“exec”、“append”和“prepend”不是像 block/deny/etc 这样的独占操作。与“redirect”和“proxy”看起来非常不同。
但 sanitiseArgs/Matched/… 或 setuid:/setsid:/setrsc: 的作用范围似乎与 setvar: 类似。然而,它们是否会被继承或被 SecRuleUpdateActionById 覆盖仍不太清楚。
这些ctl:*
标志似乎不太重要,因为它们主要是布尔标志,所以它们肯定不受 SecRuleUpdates 的影响。
答案1
事实证明这exec
是一个重复选项,但例如append
/prepend
不是。其余的都是你所期望的。
用v2/re_actions.c:
行动 | 类别 | 精氨酸 | 基数 |
---|---|---|---|
ID | 元数据 | 1,1 | 一 |
标记 | 元数据 | 1,1 | 一 |
转速 | 元数据 | 1,1 | 一 |
信息 | 元数据 | 1,1 | 一 |
日志数据 | 元数据 | 1,1 | 一 |
准确性 | 元数据 | 1,1 | 一 |
到期 | 元数据 | 1,1 | 一 |
版本 | 元数据 | 1,1 | 一 |
严重程度 | 元数据 | 1,1 | 一 |
链 | 流动 | 0,0 | 一 |
日志 | 无中断 | 0,0 | 一 |
不记录 | 无中断 | 0,0 | 一 |
审计日志 | 无中断 | 0,0 | 一 |
无审计日志 | 无中断 | 0,0 | 一 |
堵塞 | 颠覆性 | 0,0 | 一 |
否定 | 颠覆性 | 0,0 | 一 |
地位 | 颠覆性 | 1,1 | 一 |
降低 | 颠覆性 | 0,0 | 一 |
暂停 | 颠覆性 | 1,1 | 一 |
重定向 | 颠覆性 | 1,1 | 一 |
代理人 | 颠覆性 | 1,1 | 一 |
经过 | 颠覆性 | 0,0 | 一 |
跳过 | 颠覆性 | 1,1 | 一 |
跳过 | 颠覆性 | 1,1 | 一 |
允许 | 颠覆性 | 0、1 | 一 |
阶段 | 颠覆性 | 1,1 | 一 |
吨 | 无中断 | 1,1 | 许多 |
控制 | 无中断 | 1,1 | 许多 |
xmlns | 无中断 | 1,1 | 许多 |
捕获 | 无中断 | 0,0 | 一 |
净化精氨酸 | 无中断 | 1,1 | 许多 |
sanitiseMatchedBytes | 无中断 | 0、1 | 许多 |
sanitizeMatchedBytes | 无中断 | 0、1 | 许多 |
消毒精氨酸 | 无中断 | 1,1 | 许多 |
消毒匹配 | 无中断 | 0,0 | 许多 |
消毒匹配 | 无中断 | 0,0 | 许多 |
sanitiseRequestHeader | 无中断 | 1,1 | 许多 |
sanitizeRequestHeader | 无中断 | 1,1 | 许多 |
sanitiseResponseHeader | 无中断 | 1,1 | 许多 |
sanitizeResponseHeader | 无中断 | 1,1 | 许多 |
设置环境变量 | 无中断 | 1,1 | 许多 |
设定变量 | 无中断 | 1,1 | 许多 |
到期日 | 无中断 | 1,1 | 许多 |
贬低变量 | 无中断 | 1,1 | 许多 |
初始值 | 无中断 | 1,1 | 许多 |
设置 | 无中断 | 1,1 | 一 |
设定 | 无中断 | 1,1 | 一 |
设置用户标识 | 无中断 | 1,1 | 一 |
执行 | 无中断 | 1,1 | 许多 |
多重匹配 | 无中断 | 0,0 | 一 |
标签 | 元数据 | 1,1 | 许多 |
前置 | 无中断 | 1,1 | 一 |
附加 | 无中断 | 1,1 | 一 |