我怎样才能禁用PHP的“复活节彩蛋”的url?
我最近在PHP中发现了所谓的“复活节彩蛋URL” :
这些是可以添加到PHP网页的末尾以查看(稍微)隐藏的图像或网页的四个QUERYstring:
?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
这一张是最有趣的,并且展示了一只兔子在房子里的“复活节彩蛋”形象(斯特林·休斯的兔子,被命名为卡梅拉),一只棕色的狗在草地上,一只黑色的苏格兰梗狗,绘制的,蜡笔色的PHP标志,一个用面包棒(看起来像铅笔或炸薯条)像海象一样伸出来的人,或者一个PHP大象标志。
其他包括:
-
?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
(PHP标识) -
?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
(Zend标志) -
?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
(PHP Credits)
我很震惊地发现,这在许多网站,包括我自己的工作。 我认为这是愚蠢的,想要禁用它,但从我听到的唯一方法是在php.ini中用expose_php = Off
,并且它不能在运行时用ini_set()
来设置 。
我没有直接访问在服务器上的php.ini。 但是,我已经想出了如何在PHP代码中使用Header unset X-Powered-By
或.htaccess
或header('X-Powered-By: ')
Header unset X-Powered-By
header('X-Powered-By: ')
。
有没有其他的方法可以禁用这些“复活节彩蛋”,或者我必须得到这个设置改变主php.ini
(这是真正的禁用这些URL的唯一方法)?
一个快速的HTACCESS全局重写可以将每个URL的正确string进行正则expression,从而摆脱PHP中唯一有趣的部分,而不必触摸ini文件,也不需要在每个文件的开头都有一个函数。
还没有testing过,但这应该工作:
RewriteEngine On RewriteCond %{QUERY_STRING} \PHPE9568F36-D428-11d2-A769-00AA001ACF42\ [NC] RewriteRule .* - [F]
当然,只要复制其他每个可能查询的最后两行,或者写一个更通用的正则expression式。 我用正则expression式不好。 🙂
这个版本涵盖了所有的复活节彩蛋乐趣,并在这里find:
RewriteEngine On RewriteCond %{QUERY_STRING} \=PHP[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12} [NC] RewriteRule .* - [F]
在php.ini中
; Decides whether PHP may expose the fact that it is installed on the server ; (eg by adding its signature to the Web server header). It is no security ; threat in any way, but it makes it possible to determine whether you use PHP ; on your server or not. ; http://php.net/expose-php expose_php = Off
这将有效地消除复活节彩蛋
更新:这是在PHP 5.5中删除,请注意这些链接如何不再在php.net上工作