假設Perl腳本允許用戶在配置文件中指定幾個文本過濾器表達式,是否有安全的方法讓他們輸入正則表達式,而不會出現意外副作用或代碼執行的可能性?沒有真正解析正則表達式並檢查它們是否存在問題的構造,也就是說。不會有任何替代,只有匹配。從文件中讀取正則表達式安全嗎?
順便說一句,有沒有一種方法可以在實際使用之前測試指定的正則表達式是否有效?如果輸入了類似/foo (bar/
的內容,我想發出警告。
感謝,Z.
編輯:
感謝非常有趣的答案。因爲我已經發現了以下危險的構造將只在正則表達式進行評估,如果使用
use re 'eval'
編譯:
(?{code})
(??{code})
${code}
@{code}
默認爲no re 'eval'
;所以除非我錯過了某些東西,否則從文件中讀取正則表達式應該是安全的,唯一的檢查就是Axeman發佈的eval/catch。在我的測試中,至少我沒有能夠隱藏任何邪惡的東西。
再次感謝。 Z.
我剛剛讀到,它被認爲是不錯的風格,不要編輯自己的問題來提供答案,而是發佈新的答案。我爲這個假人道歉,我在這裏還是很新的。但我正在學習:-) – Zilk 2008-10-28 23:31:00