2024 年 PHP 大会日本站

PHP 5.3.12 发布公告

PHP 开发团队很高兴宣布 PHP 5.3.12 现已发布。此版本提供了一个安全修复。

某些基于 CGI 的设置中存在一个漏洞,至少 8 年来一直未被发现。 CGI 规范的第 7 节 指出

某些系统支持一种向 CGI 脚本提供字符串数组的方法。这仅在“索引”查询的情况下使用。这由不包含任何未编码“=”字符的 URL 搜索字符串的“GET”或“HEAD”HTTP 请求标识。

因此,在某些 CGI 实现中,不包含查询字符串中“=”的请求与包含“=”的请求的处理方式不同。对于 PHP 而言,这意味着包含 ?-s 的请求可能会转储页面的 PHP 源代码,但包含 ?-s&a=1 的请求则没问题。

大量网站将 PHP 作为 Apache 模块(通过 mod_php)或使用 nginx 下的 php-fpm 运行。这两种设置都不容易受到此漏洞的影响。简单的 shebang 样式 CGI 似乎也不容易受到此漏洞的影响。

如果您使用 Apache mod_cgi 运行 PHP,则您可能会受到影响。要查看您是否受到影响,只需在任何 URL 的末尾添加 ?-s。如果您看到源代码,则表示您受到影响。如果您的网站正常呈现,则表示您没有受到影响。

更糟糕的是,我们的错误系统中存在一个错误,该错误会在错误报告的评论中将错误报告的私有标志切换为公开,导致此问题在我们在测试解决方案达到我们想要的水准之前就公开。

要修复此问题,请更新到 PHP 5.3.12 或 PHP 5.4.2。我们认识到,由于这是一种相当过时的运行 PHP 的方式,因此可能无法将这些站点升级到 PHP 的现代版本,因此另一种方法是配置您的 Web 服务器,不允许以“-”开头且不包含“=”的查询字符串类型的请求通过。添加此类规则不应破坏任何站点。对于使用 mod_rewrite 的 Apache,它看起来像这样

    RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC]
    RewriteRule ^(.*) $1? [L]

如果您正在编写自己的规则,请务必考虑 urlencoded ?%2ds 版本。

有关 PHP 5.3.12 的源代码下载,请访问我们的 下载页面,Windows 二进制文件可以在 windows.php.net/download/ 上找到。存在 更改日志

To Top