这个正则表达式有什么不安全之处? [英] What is "unsafe" about this regex?

查看:21
本文介绍了这个正则表达式有什么不安全之处?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在JS代码中使用以下正则表达式来查找~...~个块:

/(?<!~)~([^~
]+)~(?!~)/g

但随后ESLint(v7.22.0配置为使用eslint-plugin-security:v1.4.0,解析器设置为ES10,在node.js上运行:v14.15.5)给了我以下警告:

Unsafe Regular Expression  security/detect-unsafe-regex

因此,我将正则表达式更改为:

/([^~]|^)~([^~
]+)~(?!~)/g

它不再给我任何警告。我还在ReDoS Checker上测试了我的两个正则表达式,结果相似。但我无法了解第一个正则表达式可能不安全的地方,而对于后一个则不是不安全的。

另外两个使用了后视功能的正则表达式也发生了这种情况。在使用回溯断言时,有什么我应该记住的吗?

推荐答案

不要太信任这些自动检查。它们可能会检测到常见的错误模式,但并不是每个警告都意味着正则表达式可能会陷入灾难性的回溯,我敢冒险说,正则表达式太复杂了,无法从自动化工具中获得明确的答案。

您显示的两个表达式是等价的,第二个表达式只是碰巧没有出错。我不认为这两个都是不安全的。

这篇关于这个正则表达式有什么不安全之处?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆