正则表达式拒绝服务攻击(ReDoS)是网络安全领域一个长久存在的问题。当正则表达式引擎采用回溯算法时,精心构造的“邪恶模式”与特定输入结合,会导致匹配时间随输入长度呈指数级增长,从而耗尽服务器资源。Python标准库的re模块就深受此问题困扰。然而,Ville Laurikari开发的TRE正则表达式引擎通过放弃回溯支持,从根本上消除了这一漏洞。这一特性已经吸引了Redis作者antirez将其集成到Redis中。受此启发,Simon Willison在2026年5月4日发布了一篇研究博客,使用Claude AI助手构建了一个实验性的Python ctypes绑定,并系统测试了TRE对抗恶意正则表达式的鲁棒性。测试结果表明,TRE在处理著名的“邪恶模式”(例如(a|aa)+b)时,即使输入规模达到1000万个字符,其处理速度依然快于Python re模块处理极短输入的速度。更重要的是,TRE的匹配复杂度随输入长度线性增长,而re模块则呈指数级爆炸。具体基准测试显示,当输入长度增加时,re模块的匹配时间从毫秒级迅速攀升到数分钟甚至更久,而TRE始终保持在毫秒级响应。这种性能差异使得TRE成为处理用户输入正则表达式的理想选择。
Willison的绑定实现非常简洁,仅使用了Python的ctypes库来直接调用TRE的C语言API。他在GitHub上提供了完整的代码和文档,包括如何安装TRE库、编译动态链接库以及使用绑定进行匹配的示例。开发者可以很容易地将TRE集成到现有的Python项目中,只需替换对re模块的调用即可。不过,需要注意的是,TRE不支持回溯特性,因此无法处理正则表达式中的反向引用、前瞻断言和后顾断言等高级功能。如果应用场景需要这些特性,则仍需使用re模块或其他引擎。但对于大多数安全敏感的场景,如Web应用的输入验证、防火墙规则匹配和日志内容过滤,TRE提供了一种更安全的替代方案。
Willison的研究进一步证实了TRE在抵御ReDoS攻击方面的卓越能力,同时也展示了大型语言模型(如Claude)在辅助开发工具和实验性代码方面的潜力。这一成果不仅对Python社区有价值,也为其他编程语言的正则表达式库设计提供了参考。随着网络攻击手段的不断进化,选择抗ReDoS的正则表达式引擎将成为构建健壮系统的重要一环。