如何找到在具有不同域名的不同服务器上运行的 php 版本?(如 www.abc.com)这不是我的服务器,没有 ftp 访问权限,无法使用以下代码制作 php 文件:
<?php
echo PHP_VERSION;
?>
如何找到在具有不同域名的不同服务器上运行的 php 版本?(如 www.abc.com)这不是我的服务器,没有 ftp 访问权限,无法使用以下代码制作 php 文件:
<?php
echo PHP_VERSION;
?>
这对我有用:
curl -I http://websitename.com
它显示了这样或类似的结果,包括 PHP 版本:
HTTP/1.1 200 OK
Date: Thu, 13 Feb 2014 03:40:38 GMT
Server: Apache
X-Powered-By: PHP/5.4.19
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Cache-Control: no-cache
Pragma: no-cache
Set-Cookie: 7b79f6f1623da03a40d003a755f75b3f=87280696a01afebb062b319cacd3a6a9; path=/
Content-Type: text/html; charset=utf-8
请注意,如果您收到此消息:
HTTP/1.1 301 Moved Permanently
您可能需要卷曲网站的 www 版本,即:
curl -I http://www.websitename.com
我使用 redbot,这是一个查看 PHP 版本的好工具,还有许多其他有用的信息,如标头、编码、keepalive 等等。
试试
我喜欢它!
我也赞成尼尔的回答:curl -I http://websitename.com
有时,PHP 会发出一个X-Powered-By:
响应头,您可以使用 Firebug 来查看它。
如果这个设置(由 ini 设置控制expose_php
)被关闭(通常是这样),就没有办法知道所使用的 PHP 版本——这是正确的。运行什么 PHP 版本与外界无关,从安全的角度来看,最好掩盖这一点。
有一种令人惊讶的有效方法是使用复活节彩蛋。
它们因版本而异。
偶然:默认错误页面通常包含详细信息,例如
Apache/{Version} ({OS}) {Modules} PHP/{Version} {Modules} 服务器位于 {Domain}
没那么容易:找出在服务器上运行的 PHP 应用程序的版本以及它们需要的 PHP 版本。
另一种方法,仅出于完整性考虑而提及;请在阅读后忘记:您可以(但您不会!)通过尝试已知的漏洞来检测 PHP 版本。
我建议您更轻松且独立于平台的问题解决方案 - Google Chrome 的 wappalyzer:
可能使用诸如 firefox 的 tamperdata 之类的东西并查看返回的标头(如果他们启用了发布)。
由于这个问题是在暗示 PHP 作为用于提取任何网站的 PHP 版本信息的工具的情况下提出的,我觉得该代码为这个问题提供了一个可行的解决方案。
下面的类用于提取给定一组 cURL 参数 ($opts) 的标头。
class get_site_php_info {
public $headers;
public function __construct() {
$this->headers = array();
}
public function fetch_headers($opts){
$opts[CURLOPT_HEADERFUNCTION] = array($this, '_setHeader');
$ch = curl_init();
curl_setopt_array($ch, $opts);
return curl_exec($ch);
}
private function _setHeader($ch, $header) {
$this->headers[] = $header;
return strlen($header);
}
}
当以下面代码中指定的形式提交 URL 时,将调用此类。
echo "<h1>Get Site Header Information</h1>";
echo "<h3>Domain input form</h3>";
echo "<form action='" . $_SERVER['PHP_SELF'] . "' method='post' enctype=''>" .
"<table>" .
"<tr><td>Enter URL: </td>" .
"<td><input type='text' name='url' value='' size='40' maxlength='128' placeholder='your domain here' /></td>" .
"</tr>" .
"<tr><td colspan='2'><input type='hidden' name='action' value='submitted' />" .
"<input type='submit' name='submit' value='Submit' /> " .
"<input type='reset' value='Reset' /></td></tr>" .
"</table>" .
"</form>";
if (isset($_POST['action']) && $_POST['action'] == "submitted") {
echo "<h4>Output</h4>";
if ($_POST['url']) {
$url = substr($_POST['url'], 0, 4) == 'http'? $_POST['url']: 'http://' . $_POST['url'];
echo "<h3>General [" . $url . "]</h3>";
$opts = array(
CURLOPT_URL => $url, // set the URL
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 3,
);
$info = new get_site_php_info;
$data = $info->fetch_headers($opts);
echo "<h3>Headers</h3><pre>" . var_export($info->headers, true) . "</pre>";
} else {
echo "<p>The field is not set!!</p>";
}
echo "<p><a href='" . $_SERVER['PHP_SELF'] . "'>Try again</a></p>";
}
我确信可以改进代码和 cURL 选项,但这提供了一个有效的 PHP 代码,用于提取允许提取 PHP 版本和其他信息的标头。Helow 是一个示例输出:
我希望这段代码对某人有用并节省一些时间。
有可能通过其他已经提到的开发工具检查浏览器中的“X-Powered-By”响应标头来找到其他域的 PHP 版本。如果它没有通过 php.ini 配置公开,除非您有权访问服务器,否则您无法获取它。
你不能。一个原因是并非每个网站都使用 PHP。另一个原因是:即使有一些迹象表明可能会使用 PHP(例如.php
,文件扩展名、某些“PHPSESSID”参数、包含“PHP”的 X-Powered-By标头字段等),这些信息也可能被欺骗以使你认为 PHP 被使用了。
答案是:NMAP 程序
感谢您的关注...
另一种方法是通过此站点 (http://web-sniffer.net/) 或 firefox 插件获取 HTTP 标头以获取 HTTP 标头...
此致