gpt4 book ai didi

regex - 有没有办法测试我的正则表达式是否容易受到灾难性回溯的影响?

转载 作者:行者123 更新时间:2023-12-04 16:39:38 26 4
gpt4 key购买 nike

关于这个主题有很多问题,但我不确定我的正则表达式是否容易受到攻击。
以下正则表达式是我用于电子邮件验证的:

/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)
因为我在一些地方使用了 *,所以我怀疑它可能是。
我希望能够测试我的代码中出现的任意数量的问题。
我正在使用 Node.js,因此鉴于事件循环的单线程性质,这可能会完全关闭我的服务器。

最佳答案

好问题。是的,如果输入正确,它很容易受到攻击,失控的正则表达式能够阻止整个节点进程,从而使服务不可用。
容易发生灾难性回溯的正则表达式的基本示例如下所示

^(\w+)*$
可以在给定正则表达式中多次找到的模式。
当正则表达式包含可选量词并且输入包含最终无法匹配的长序列时,JS 正则表达式引擎不得不大量回溯并消耗 CPU。如果输入足够长,则可能无限期。 (你可以在 regex101 上玩这个,也可以通过调整设置中的超时值来使用你的正则表达式。)
一般来说,
  • 避免 monstrosities ,
  • 尽可能使用 HTML5 输入验证(在前端),
  • 使用已建立的验证库进行通用输入,例如validator.js ,
  • 尝试使用 safe-regex 之类的工具提前检测潜在的灾难性指数时间正则表达式& vuln-regex-detector (那些提供了您所想到的),
  • 并了解您的东西 1 , 2 , 3 (我认为第三个链接最好地解释了这个问题)。

  • 缓解 node.js 中灾难性回溯的更激进方法是将您的正则表达式工作包装在子进程中或 vm context并设置一个有意义的超时。 (在完美的世界中,JavaScript 的 RegExp 构造函数会有一个超时参数,也许有一天。)
  • 描述了使用子进程的方法 here在 SO 上。
  • 描述了 VM 上下文(沙箱)方法 here .
  • 关于regex - 有没有办法测试我的正则表达式是否容易受到灾难性回溯的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63531791/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com