Skip to content

Latest commit

 

History

History
12 lines (8 loc) · 808 Bytes

File metadata and controls

12 lines (8 loc) · 808 Bytes

正则验证器

正则表达式在各种软件开发中是很常用的工具,但是稍微不注意的话就会导致代码出现 DoS 的漏洞,即精心挑选的正则表达式(或者待匹配字符串)可以让匹配引擎长时间运行,占用大量 CPU 资源,这道题就是考这个小知识的。

找到一个能卡住匹配引擎的表达式并不难,例如 Wikipedia 上的第一个示例就可以直接拿来用:

Regex: (a*)*$
String: aaaaaaaaaaaaaaaaaaaaaaab

上面这个正则由于失败时回溯的存在,每增加一个 a 就会使匹配时间翻一倍,出题时我测算了几次,i7-8850H (4.30 GHz) 可以在 1 秒内对 25 个 a 运行(并失败),所以实际字符串限制我就写成了 24 个字符。