2016-10-20 105 views
-1

在需要從env變量中讀取的cgi-bin中有一個apache項目和一個perl腳本。cgi bin perl腳本的SetEnv或PassEnv變量

在Apache的配置使用PassEnvSetEnv通過ENV變量在Perl

foreach $key (sort keys(%ENV)) { print "$key = $ENV{$key}<p>"; }

什麼我做錯了循環時的變量不顯示?

+0

適合我。這可能有助於顯示您的Apache配置。 – ThisSuitIsBlackNot

回答

0

出於安全原因,Apache的suexec包裝清除了所有未出現在其白名單上的環境變量。一般而言,此白名單僅包含屬於CGI界面的變量:DOCUMENT_ROOT,REQUEST_METHOD,SCRIPT_FILENAME,以及以HTTP_(來自HTTP標頭)開頭的任何變量。

不幸的是,這使得當啓用suexec時SetEnv基本上沒用。這是一個已知的限制,但如果不引入潛在的安全漏洞就很難解決。

+0

OP在哪裏說他在使用suexec?沒有它,SetEnv可以正常工作。 – ThisSuitIsBlackNot

+0

這是一個最好的猜測。在許多Web服務器配置中,默認情況下suexec處於打開狀態,它很好地解釋了爲什麼環境變量會丟失。 – duskwuff