在 ModSecurity 中有PCRE limits exceeded错误。
我知道我可以通过设置规则来解决这个问题,例如:
SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000
Run Code Online (Sandbox Code Playgroud)
但是,这些规则实际上在做什么?PCRE 限制递归设置为 150,000 是什么意思?通过将这些设置得如此高,我允许通过哪些安全漏洞?什么是recursion和limit是什么意思?
我知道有文档,但文档实际上并没有告诉我发生了什么,它只是告诉我如何使用指令。
Der*_*rfK 13
这些似乎是 PCRE 引擎的内部设置,以限制尝试将某些文本与模式匹配所花费的最大内存量/时间。该pcreapi 手册页做一点解释通俗地说:
match_limit 字段提供了一种防止 PCRE 在运行不匹配但在其搜索树中具有大量可能性的模式时使用大量资源的方法。经典的例子是使用嵌套的无限重复。
在内部,PCRE 使用一个称为 match() 的函数,它会重复调用(有时是递归调用)。由 match_limit 设置的限制被强加在匹配期间调用此函数的次数上,这具有限制可以发生的回溯量的效果。对于未锚定的模式,对于主题字符串中的每个位置,计数从零重新开始。
可以在构建 PCRE 时设置 limit 的默认值;默认默认值是 1000 万,它可以处理除最极端情况之外的所有情况。您可以通过使用 pcre_extra 块提供 pcre_exec() 来覆盖默认值,其中设置了 match_limit,并在标志字段中设置了 PCRE_EXTRA_MATCH_LIMIT。如果超出限制,pcre_exec() 返回 PCRE_ERROR_MATCHLIMIT。
match_limit_recursion 字段与 match_limit 类似,但它不是限制调用 match() 的总次数,而是限制递归深度。递归深度比调用总数小,因为并非所有 match() 调用都是递归的。此限制仅在设置为小于 match_limit 时才有用。
由于PCRE库内置默认为10000000,我的猜测是mod_security建议较低的设置,以防止请求被长时间阻塞。
| 归档时间: |
|
| 查看次数: |
19102 次 |
| 最近记录: |