全栈开发
后端基础
【Q423】什么是安全的正则表达式

什么是安全的正则表达式

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 430 (opens in a new tab)

Author 回答者: shfshanyue (opens in a new tab)

下边这个正则表达式能把 CPU 跑挂的正则表达式就是一个定时炸弹,回溯次数进入了指数爆炸般的增长。

可以参考文章 浅析 ReDos 原理与实践 (opens in a new tab)

const safe = require("safe-regex");
const re = /(x+x+)+y/;
 
// 能跑死 CPU 的一个正则
re.test("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
 
// 使用 safe-regex 判断正则是否安全
safe(re); // false

safe-regex (opens in a new tab) 能够发现哪些不安全的正则表达式。