2014-08-31 83 views
7

假設我想讓用戶輸入他想要的任何正則表達式和一個匹配的字符串,並且我將使用Python的re.compile來檢查它是否匹配。這是安全的嗎?有沒有辦法讓惡意用戶通過傳入特製的字符串來崩潰或獲得遠程執行?正則表達式的安全性

+2

作爲一個側面說明,根據您的需要,或許值得考慮一個簡單的_glob_表達式,而不是完整的正則表達式。對於大多數用戶來說,它更容易理解。這將需要更少的電力來處理。但是,這又取決於你的需求...... – 2014-08-31 11:09:21

回答

9

我不認爲re.compile()會成爲一個問題。當然,它可以拋出異常與無效的正則表達式,但你可以很容易地捕捉到這些。 Python正則表達式不允許代碼標註(例如,與Perl不同),所以我沒有看到攻擊者可以用來將惡意代碼注入正則表達式的機制。

實際上運行正則表達式(通過re.search()等)可能是一個問題,但是,因爲Python沒有采取任何預防措施,可能會導致正則表達式的運行時迅速增加。

在一個專門的過程中運行正則表達式可能是一個好主意,如果它在一秒鐘左右內沒有完成,就殺掉它。