我的(基於Perl的)應用程序需要讓用戶輸入正則表達式來匹配幕後的各種字符串。我的計劃迄今已採取的字符串,並把它包在像如何安全地使用用戶輸入的正則表達式?
$regex = eval { qr/$text/ };
if (my $error = [email protected]) {
# mangle $error to extract user-facing message
($text
已經被剝奪了換行的時間提前,因爲它是在一個多行文本字段實際上多正則表達式,我split
)。
這樣做有沒有任何潛在的安全風險 - 一些奇怪的輸入可能導致任意代碼執行? (除了像CVE-2007-5116這樣的正則表達式引擎中的緩衝區溢出漏洞外)。如果是這樣,是否有辦法緩解它們?
有沒有更好的方法來做到這一點?任何有助於抽象將用戶輸入轉換爲正則表達式的操作的抽象Perl模塊(比如提取錯誤消息......或者提供像/i
這樣的修飾符,我在這裏不需要這些修飾符,但會很好)?我搜查CPAN並沒有發現太多有希望的東西,但是我有可能錯過了一些東西。
你的意思是像'(?{code})'令牌? – 2010-01-29 01:44:55
曾聽說過taintperl? – Ether 2010-01-29 04:20:40
@Ether:如何幫助這裏的污點?它有助於防止您在可能導致安全問題的情況下意外使用不可信輸入。在這裏,我們正在尋找一種安全使用不可信的正則表達式的方法。 – cjm 2010-01-29 09:15:03