2015-09-16 48 views
0

當在Perl中隱藏變量時,是否所有的未知事項都必須在本地完成到Perl(.pl)文件,還是可以通過Perl模塊(.pm)傳遞給隱藏?通過Perl模塊子程序傳遞Perl Untaint變量

例如,可以解除污染看起來是這樣的:

$string =~ /\A(.*)\z/s 

(顯然這是一個不好的做法,毯子匹配任何輸入,這只是顯示一個例子)

我想知道是否可以通過.pm傳遞它,因爲我想在多個.pl文件中執行相同的正則表達式。

use myModule; 

$string = myModule::myUntaint($string); 

其中 「myUntaint」 是包含我正則表達式的名.pm 「MyModule的」 內的子程序。

+2

它永遠不應該看起來像'$ string =〜/ \ A(。*)\ z/s'或myModule :: myUntaint $字符串);'。它應該驗證值。 – ikegami

+2

你試過這個嗎?我認爲,因爲'CGI :: Untaint'或'Untaint'存在,它的工作原理。然而,出於顯而易見的原因 - 你不應該只是隱瞞一點,因爲整個問題是確保任何潛在的危險輸入不再存在。 – Sobrique

+0

感謝您的輸入。我用'$ string =〜/ \ A(。*)\ z/s'作爲一個簡單的例子。這顯然是一個非常可怕的做法,可以用來進行比賽 - 任何事情都可以在無人問題時進行。 myModule .pm中的myUntaint()子例程將包含正確的正則表達式來驗證值。 – SpenserAD

回答

0

是的,你可以在一個模塊中有一個子例程,它接受一個受污染的參數並返回一個從它衍生出來的未經處理的表達式。

但是,你不應該使用通用的匹配任何表達式如/\A(.*)\z/s來進行修復。這破壞了污點的目的,這是爲了確保價值看起來像你在使用它之前所期待的。 (但是這與無用的代碼在哪裏生活無關)

+0

感謝您的輸入。你是對的,應該很少(從不)做一次全面的比賽 - 任何表達。這只是一個簡單的例子。 – SpenserAD