PHP Conference Japan 2024

可能的攻击

将 PHP 作为 CGI 二进制文件使用是某些设置的一种选择,这些设置由于某种原因不希望将 PHP 作为模块集成到服务器软件(如 Apache)中,或者将 PHP 与各种 CGI 包装器一起使用来为脚本创建安全的 chrootsetuid 环境。此设置通常涉及将可执行的 php 二进制文件安装到 Web 服务器的 cgi-bin 目录中。CERT 建议 » CA-96.11 建议不要将任何解释器放置到 cgi-bin 中。即使 php 二进制文件可以用作独立解释器,PHP 也旨在防止此设置可能造成的攻击。

  • 访问系统文件:http://my.host/cgi-bin/php?/etc/passwd URL 中问号 (?) 之后的查询信息作为命令行参数由 CGI 接口传递给解释器。通常,解释器会打开并执行作为命令行第一个参数指定的的文件。 当作为 CGI 二进制文件调用时,php 拒绝解释命令行参数。
  • 访问服务器上的任何 Web 文档:http://my.host/cgi-bin/php/secret/doc.html PHP 二进制文件名之后的 URL 路径信息部分,/secret/doc.html 通常用于指定要由 CGI 程序打开和解释的文件的名称。通常,一些 Web 服务器配置指令(Apache: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_redirectdoc_rootuser_dir 可用于防止此攻击,如果服务器文档树有任何访问限制的目录。有关不同组合的完整说明,请参见下文。
添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top