将 PHP 作为 CGI 二进制文件使用是某些设置的一种选择,这些设置由于某种原因不希望将 PHP 作为模块集成到服务器软件(如 Apache)中,或者将 PHP 与各种 CGI 包装器一起使用来为脚本创建安全的 chroot 和 setuid 环境。此设置通常涉及将可执行的 php 二进制文件安装到 Web 服务器的 cgi-bin 目录中。CERT 建议 » CA-96.11 建议不要将任何解释器放置到 cgi-bin 中。即使 php 二进制文件可以用作独立解释器,PHP 也旨在防止此设置可能造成的攻击。
?
) 之后的查询信息作为命令行参数由 CGI 接口传递给解释器。通常,解释器会打开并执行作为命令行第一个参数指定的的文件。 当作为 CGI 二进制文件调用时,php 拒绝解释命令行参数。 Action
)用于将对诸如 http://my.host/secret/script.php 之类文档的请求重定向到 PHP 解释器。在此设置中,Web 服务器首先检查对目录 /secret 的访问权限,然后创建重定向的请求 http://my.host/cgi-bin/php/secret/script.php。不幸的是,如果最初以这种形式给出请求,Web 服务器不会对文件 /secret/script.php 进行访问检查,而只会对 /cgi-bin/php 文件进行检查。这样,任何能够访问 /cgi-bin/php 的用户都能够访问 Web 服务器上的任何受保护的文档。 在 PHP 中,运行时配置指令 cgi.force_redirect、doc_root 和 user_dir 可用于防止此攻击,如果服务器文档树有任何访问限制的目录。有关不同组合的完整说明,请参见下文。