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