node.js - 这个正则表达式有什么“不安全”的?
问题描述
我试图在我的 JS 代码中使用以下正则表达式来查找~...~
块:
/(?<!~)~([^~\n]+)~(?!~)/g
但是随后 ESLint(v7.22.0
配置为使用 eslint-plugin-security: v1.4.0
,解析器设置为ES10
,在 node.js 上运行:)v14.15.5
给了我以下警告:
Unsafe Regular Expression security/detect-unsafe-regex
因此,我将正则表达式更改为:
/([^~]|^)~([^~\n]+)~(?!~)/g
它不再给我任何警告。我还在ReDoS Checker上测试了我的两个正则表达式,结果相似。但是我无法得到第一个正则表达式可能不安全的地方,而后者在后一个正则表达式的情况下并不安全。
这发生在另外两个使用后向功能的正则表达式中。在使用后向断言时我应该记住什么?
解决方案
不要对这些自动检查过于信任。他们可能会检测到常见的错误模式,但并非每个警告都一定意味着正则表达式可能会遇到灾难性的回溯,我会说正则表达式太复杂,无法从自动化工具中获得明确的答案.
您显示的两个表达式是等效的,第二个恰好没有绊倒电线。我不认为这两者都不安全。
推荐阅读
- python - TypeError: __init__() 为参数 'center' 获得了多个值
- azure - 需要在 azure 中创建一个策略,以确保传输中的数据和其余数据被加密
- calendarkit - CalendarKit - EventView 没有成员数据
- java - 无法从数据库中获取对象
- php - 数组到字符串的转换 Laravel 上传多张图片
- mysql - Mysql查询选择用户的朋友列表是否是登录用户的朋友
- c# - 使用属性将单选按钮的值传递给另一个表单
- sql - 在 SQL 中显示列之间的差异为 1 天的行
- javascript - JS中的ASYNC forEach函数未按预期顺序发生
- windows - 我不明白什么是“终端”