安全性考量

Pygments 不保證執行時間,當使用 Pygments 處理任意使用者輸入時,需要將此點納入考量。例如,如果您的網路服務使用 Pygments 進行語法高亮,可能會有一些輸入導致 Pygments 程序「永遠」執行和/或使用大量的記憶體。如果程序沒有快速終止,這可能會被用來對伺服器執行遠端阻斷服務攻擊。

不幸的是,要加強 Pygments 本身以防範這些問題實際上是不可能的:某些正規表達式可能會導致「災難性回溯」,但其他錯誤(例如不正確的匹配器)也可能導致類似的問題,而且沒有辦法以自動化的方式找到它們(除非解決停機問題)。Pygments 有大量的單元測試、自動隨機測試,並由 OSS-Fuzz 進行測試,但我們永遠無法消除這方面的所有錯誤。

我們的建議是

  • 確保 Pygments 程序在合理短的逾時時間後終止。一般來說,對於合理大小的輸入,Pygments 應在數秒內完成。

  • 限制同時執行的 Pygments 程序數量,以避免資源過度使用。

Pygments 的作者會將任何導致長時間處理的錯誤視為高度優先事項 - 這是將在修補程式版本中修復的問題。當您回報一個懷疑是超線性執行時間的錯誤時,請務必附上可以重現該錯誤的輸入。