AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 408265
Accepted
user101130
user101130
Asked: 2012-07-17 11:36:54 +0800 CST2012-07-17 11:36:54 +0800 CST 2012-07-17 11:36:54 +0800 CST

什么是 PCRE 限制?

  • 772

在 ModSecurity 中存在PCRE limits exceeded错误。

我知道我可以通过设置规则来解决这个问题,例如:

SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000

但是,这些规则实际上在做什么?PCRE限制递归设置为150,000是什么意思?通过将这些设置得如此之高,我允许通过哪些安全漏洞?是什么recursion意思limit?

我知道有文档,但文档实际上并没有告诉我发生了什么,它只是告诉我如何使用指令。

regex mod-security pcre
  • 2 2 个回答
  • 20801 Views

2 个回答

  • Voted
  1. Best Answer
    DerfK
    2012-07-17T12:11:11+08:002012-07-17T12:11:11+08:00

    这些似乎是 PCRE 引擎的内部设置,目的是限制尝试将某些文本与模式匹配所花费的最大内存量/时间。pcreapi 联机帮助页几乎没有用外行的话来解释它:

    match_limit 字段提供了一种防止 PCRE 在运行不会匹配但在其搜索树中有大量可能性的模式时耗尽大量资源的方法。经典的例子是嵌套无限重复的使用。

    在内部,PCRE 使用一个名为 match() 的函数,它会重复调用(有时是递归调用)。match_limit 设置的限制强加在匹配期间调用此函数的次数,这具有限制可以发生的回溯量的效果。对于未锚定的模式,对于主题字符串中的每个位置,计数从零重新开始。

    构建PCRE时可以设置limit的默认值;默认值为 1000 万,可以处理除最极端情况以外的所有情况。您可以通过为 pcre_exec() 提供一个设置了 match_limit 的 pcre_extra 块来覆盖默认值,并且在标志字段中设置了 PCRE_EXTRA_MATCH_LIMIT 。如果超过限制,pcre_exec() 返回 PCRE_ERROR_MATCHLIMIT。

    match_limit_recursion 字段类似于 match_limit,但它不是限制调用 match() 的总次数,而是限制递归的深度。递归深度小于调用总数,因为并非所有对 match() 的调用都是递归的。此限制仅在设置为小于 match_limit 时才有用。

    由于 PCRE 库内置默认值是 10000000,我的猜测是建议为 mod_security 设置较低的设置,以防止请求被长时间阻止。

    • 13
  2. user648796
    2021-04-30T05:11:59+08:002021-04-30T05:11:59+08:00

    您在 mod_security.conf 中看到的值是 RegEx DoS 规则的一部分:

    SecPcreMatchLimit 10000
    SecPcreMatchLimitRecursion 10000
    SecRule TX:/^MSC_/ "!@Streq 0"
    "id:'200004',phase:2,t:none,deny,msg:'ModSecurity internal error flagged:
    %{MATCHED_VAR_NAME}'"
    
    • 0

相关问题

  • 通过正则表达式对终端进行全局着色

  • 用于正则表达式替换的 Bash 命令

  • 将执行 Perl REGEX 扩展的 Lex Flex 变体

  • AWSStats 忽略除一个子目录以外的所有子目录

  • 使用正则表达式在 linux 中重命名文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve