如何使用混淆的“ SERVER_SOFTWARE”确定PHP中的服务器类型

时间:2019-04-13 21:13:46

标签: php apache nginx lighttpd mod-security2

我已经使用“ mod_security2”保护了服务器的安全,并将“ Server:”标头更改为其他值。它说:“服务器:exampleserver”。 我使用了以下mod_security选项:

ServerTokens Full
SecServerSignature exampleserver

一个副作用是$_SERVER["SERVER_SOFTWARE"]也等于“ exampleserver”。

因此确定服务器类型的典型代码不再有效

if( strpos( $_SERVER['SERVER_SOFTWARE'], 'Apache') !== false) 
  echo 'Have Apache';
else
  echo 'Have some other server';

在检查可从PHP获得的信息时,我发现此特定的PHP7安装程序具有在Apache中加载的“ apache2handler”扩展名。

所以我将测试更新为:

$isApache=  extension_loaded('apache2handler')
          ||(strpos(getenv('SERVER_SOFTWARE'),'Apache')!==false);

$_SERVER['SERVER_SOFTWARE']不可用时,是否有更好的方法来确定PHP内的服务器类型?

1 个答案:

答案 0 :(得分:0)

您可以使用php_sapi_name() function来确定PHP的运行方式。在我的Web服务器上,这将返回“ apache2handler”。在命令行上,它返回“ cli”。