在cgi-bin中有一个apache项目和一个需要从env变量中读取的perl脚本。
在apache配置中使用PassEnv
或SetEnv
,在循环遍历perl中的env变量时,变量不会显示
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
我做错了什么?
答案 0 :(得分:0)
出于安全原因,Apache的suexec包装器会清除其白名单中未显示的所有环境变量。一般来说,此白名单只包含属于CGI界面的变量:DOCUMENT_ROOT
,REQUEST_METHOD
,SCRIPT_FILENAME
,等,以及任何以...开头的变量HTTP_
(来自HTTP标头)。
不幸的是,这使得SetEnv
在启用suexec时基本无用。这是一个已知的限制,但如果不引入潜在的安全漏洞,很难解决。