正則表達式拒絕服務攻擊(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的正則表達式引擎將成為構建健壯系統的重要一環。