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

我使用“mod_security2”保护了我的服务器,并将“Server:”标题更改为其他值。 它说:“服务器:exampleserver”。
我使用了以下mod_security选项:</ p>

  ServerTokens Full 
SecServerSignature exampleserver
</ code> </ pre>

副作用是 $ _ SERVER [“SERVER_SOFTWARE”] </ code>也等于“exampleserver”。</ p>

因此确定服务器的典型代码 类型不再有效</ strong>:</ p>

  if(strpos($ _SERVER ['SERVER_SOFTWARE'],'Apache')!== false)
echo'Ado Apache ';
else
echo'有一些其他服务器';
</ code> </ pre>

在检查PHP提供的信息时,我发现这个特殊的PHP7设置有“apache2handler” “在Apache中加载扩展。</ p>

所以我将测试更新为:</ p>

  $ isApache = extension_loaded('apache2handler')
| |(strpos(getenv('SERVER_SOFTWARE'),'Apache')!== false);
</ code> </ pre>

有没有更好的方法来确定 当 $ _ SERVER ['SERVER_SOFTWARE'] </ code>不可用时,服务器的类型在PHP内部 e?</ strong> </ p>
</ div>

展开原文

原文

I've secured my server using "mod_security2" and changed the "Server:" header to a different value. It says: "Server: exampleserver". I used the following mod_security options:

ServerTokens Full
SecServerSignature exampleserver

A side effect is that $_SERVER["SERVER_SOFTWARE"] also equals "exampleserver".

Therefore the typical code to determine the server type no longer works:

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

While checking the information available from PHP, I found that this particular PHP7 setup has the "apache2handler" extension loaded in Apache.

So I updated my test to:

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

Is there a better way to determine what the type of server is inside PHP when $_SERVER['SERVER_SOFTWARE'] is not available ?

dongyouzhi7218
dongyouzhi7218 更改签名的一个目的是混淆有关版本的信息。所以所有服务器都有相同的签名-没有版本。服务器类型也会更改。我也在寻找更通用的解决方案。
大约一年之前 回复
dongyushen9063
dongyushen9063 嗯。如果您控制服务器签名的答案是什么,为什么不将您在那里使用的值插入PHP测试?
大约一年之前 回复
dongye1942
dongye1942 在lighttpd上,apache_get_version不存在,在apache上它返回与$_SERVER['SERVER_SOFTWARE']相同的值-<?phpif(function_exists(apache_get_version)){echoapache_get_version();回声'<br/>';echophp_sapi_name();回声'<br/>';echophpinfo();
一年多之前 回复
duanjiao5261
duanjiao5261 如果它以mod_php运行,则您可以使用相应的函数。
一年多之前 回复

1个回答



您可以使用 php_sapi_name()</ code> function 以确定PHP的运行方式。 在我的Web服务器上,它返回“apache2handler”。 在命令行中,它返回“cli。”</ p>
</ div>

展开原文

原文

You can use the php_sapi_name() function to determine how PHP is running. On my web server, this returns "apache2handler." On the command line, it returns "cli."

drxnfdx798517235
drxnfdx798517235 在使用apache2handler的地方,它会报告apache2handler,但在我运行的lighttpd服务器上,php_sapi_name()报告'cgi-fcgi'。 因此,当它与apache2连接到FastCGI而不是Apache2.0处理程序时,这可能会报告相同的情况。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐