Php 如何欺骗爬虫/扫描器检测web技术?

Php 如何欺骗爬虫/扫描器检测web技术?,php,security,Php,Security,我有一个PHP网站,我已经完成了所有的URL重写。这样就隐藏了PHP扩展。但不知何故,webcrawlers和安全扫描程序/漏洞扫描程序能够找到我的网站是用PHP开发的 我该如何避免这种情况,或者我该如何欺骗他们,让他们知道这个网站不是通过PHP开发的?这是一种合法的方法。 大多数web漏洞扫描程序或爬虫程序都会利用您的网站标题来发现这一点。说如果你这样做了 <?php var_dump(headers_list()); 因此,有了这些信息,爬虫可以很容易地弥补您的网站是用PHP开发的

我有一个PHP网站,我已经完成了所有的URL重写。这样就隐藏了PHP扩展。但不知何故,webcrawlers和安全扫描程序/漏洞扫描程序能够找到我的网站是用PHP开发的

我该如何避免这种情况,或者我该如何欺骗他们,让他们知道这个网站不是通过PHP开发的?

这是一种合法的方法。
大多数web漏洞扫描程序或爬虫程序都会利用您的网站标题来发现这一点。说如果你这样做了

<?php
var_dump(headers_list());
因此,有了这些信息,爬虫可以很容易地弥补您的网站是用PHP开发的

如何避免这种情况? 您可以使用PHP中的
header\u remove()
实现这一点

正如你从代码中看到的

<?php
echo "<pre>";
var_dump(headers_list());
header_remove();
var_dump(headers_list());

标题现在是空的。

正如我在评论中提到的,我开发了一个安全扫描程序,它可能与您试图隐藏某些信息的扫描程序相似

很难做到这一点的原因之一是,安全扫描程序通常不会只查看一件事情。我工作的那个网站使用一个非常大的指纹数据库来确定特定的文件或行为是否代表某个插件、框架、网站构建器,或者即使该网站是以与另一个使用特定工具生成HTML的网站在结构上相似的方式生成的

一旦我们发现了一种技术,我们可以根据这些指纹将其与另一个网站联系起来,而该网站不会公开所有相同的信息,甚至可能会故意将其更改为误导性的内容

一个很好的例子是,当人们将
X-Powered-By
标题更改为不代表他们使用的内容时

假设您运行的是一个PHP驱动的网站,但您的
X-Powered-By
标题是“Microsoft ASP.NET”或其他任何内容。如果您的所有扩展都以
.php
结尾或被隐藏,那么我们可以假设这些信息是错误的或有问题的。其他技术(如ASP.NET)也存在某些行为上的细微差别,即存在结构指纹,如
\u VIEWSTATE
字符串

此外,您需要记住URL格式、POST/PUT行为,甚至您运行的其他软件。例如,如果您运行WordPress,很可能您正在使用PHP

这只是一个小例子。每项技术都有数千条规则,这让我们越来越相信自己的猜测是正确的。我们有一个产品数据库,每个产品都有独特的或交叉的指纹,其中大约有10000种已识别的产品


所有这些信息都被收集和分析。如果我们确定一个网站没有正确地表示它自己,它会标记该网站和一个有问题的页面列表,以供人类审查,此时,分析员将手动插入网站,手动确定其技术,并为其找出新的指纹。

此设置可能相关:爬虫还可以检测框架等常用插件的文件夹结构/资产,并将其与langauge匹配。一个例子是检查
/wp admin
意思是wordpress。但是我已经隐藏了几乎所有的扩展。即使你用重写来剥离扩展,仍然可以检测到扩展。一种方法是在web服务器允许的情况下直接访问文件。因此,
/test
可能会在内部重定向到
/test.php
,也会重定向到
/test.php
,但不会重定向到
/test.xml
;这当然取决于web服务器以及您删除扩展或过滤请求的方式。我开发了一个安全扫描程序,我可以说,这肯定是导致它退回到其他检测方法的一种方法。我们使用多种方法来确定网站使用何种技术的可信度。一个是标题,然后是一些人已经提到的文件夹结构,然后是猜测文件的校验和。我们为超过10000个不同的插件、框架等使用了一个非常大的启发式数据库。我们还检查HTTP响应代码,以确定某个内容是否被显式规则或广泛覆盖规则阻止,或者该文件是否不存在。正如我在评论中所发布的,可以通过更改此ini设置来禁用该标题:使用
header_remove()
删除所有标题肯定是过火了,并且很容易产生不可预见的副作用。@MichaelJ.Gray您应该键入该答案,因为它解释了OP不太可能实现其目标的原因。@MichaelJ.Gray,很有趣。。。伊姆索普,是的,这也是一个不错的选择。我想这将解决我目前暂时的问题。我现在就接受你的答案,如果有人发布比这更好的帖子,我准备接受其他答案。比如说对吗?@ShankarDamodaran是的。作为ASP.NET进行欺骗并且网站中没有指纹会导致使用手动审查或其他身份验证方法。最好是将URL重写为“.html”,并试图欺骗爬虫,使其相信网站是静态呈现的。但是,定时攻击可以揭示内容是否生成。。。还有一些更时髦的方法。最后,让人们知道你在使用PHP并不是件坏事。保护好你的文件!解释得很好。迈克。我的+1
<?php
echo "<pre>";
var_dump(headers_list());
header_remove();
var_dump(headers_list());
array(1) {
  [0]=>
  string(23) "X-Powered-By: PHP/5.4.3"
}

array(0) {
}