在需要從env變量中讀取的cgi-bin中有一個apache項目和一個perl腳本。cgi bin perl腳本的SetEnv或PassEnv變量
在Apache的配置使用PassEnv
或SetEnv
通過ENV變量在Perl
foreach $key (sort keys(%ENV)) { print "$key = $ENV{$key}<p>"; }
什麼我做錯了循環時的變量不顯示?
在需要從env變量中讀取的cgi-bin中有一個apache項目和一個perl腳本。cgi bin perl腳本的SetEnv或PassEnv變量
在Apache的配置使用PassEnv
或SetEnv
通過ENV變量在Perl
foreach $key (sort keys(%ENV)) { print "$key = $ENV{$key}<p>"; }
什麼我做錯了循環時的變量不顯示?
出於安全原因,Apache的suexec包裝清除了所有未出現在其白名單上的環境變量。一般而言,此白名單僅包含屬於CGI界面的變量:DOCUMENT_ROOT
,REQUEST_METHOD
,SCRIPT_FILENAME
,等以及以HTTP_
(來自HTTP標頭)開頭的任何變量。
不幸的是,這使得當啓用suexec時SetEnv
基本上沒用。這是一個已知的限制,但如果不引入潛在的安全漏洞就很難解決。
OP在哪裏說他在使用suexec?沒有它,SetEnv可以正常工作。 – ThisSuitIsBlackNot
這是一個最好的猜測。在許多Web服務器配置中,默認情況下suexec處於打開狀態,它很好地解釋了爲什麼環境變量會丟失。 – duskwuff
適合我。這可能有助於顯示您的Apache配置。 – ThisSuitIsBlackNot