例如,stackexchange.com
无需向网站所有者或Google询问有关开发网站的信息,这是否可能知道后端使用了哪种语言?
似乎,网站没有.extension
栏,例如.php
可以指示开发于的栏,PHP
但没有扩展名,我怎么知道呢?
例如,stackexchange.com
无需向网站所有者或Google询问有关开发网站的信息,这是否可能知道后端使用了哪种语言?
似乎,网站没有.extension
栏,例如.php
可以指示开发于的栏,PHP
但没有扩展名,我怎么知道呢?
Answers:
有指标。有些更容易找到,有些则更难。
.php
表示该网站是用PHP编写的,.asp
表示经典的ASP,.aspx
表示ASP.NET,.jsp
表示Java JSP,...JSESSIONID
是Java服务器中广泛使用的cookie名称但是所有这些都可以删除/更改/伪造。有些更改比其他更改更容易,但是没有100%可靠。
更改这些指标有多种原因:
JSESSIONID
是PHPSESSID
。
好的,开发人员可以在该域上放置humans.txt文件,该文件提供有关站点开发的一些信息,也许是谁进行站点开发以及使用了哪些标准或工具。如果他们希望您知道这些信息,则可以/应该将其放在那里。但是,就像其他任何东西一样,它是可选的,因此也不能保证会通知您。查看humans.text
不,如果网站站长不想透露,可能会相当困难,即使不是不可能。少数框架具有某些特征,但可以隐藏。
文件扩展名:没有真正的理由使用标准文件扩展名,并且大多数现代MVC仍然使用URL路由。因此,除非站点已经存在了一段时间,否则您可能看不到任何东西(例如stackexchange不使用.aspx
扩展名);
会话ID:例如PHPSESSID
PHP的默认ID ,但可以轻松覆盖;
具有Web服务器和脚本语言版本的标头:可以关闭甚至伪造。
难以隐藏的东西:
[]
在名称后附加一个名称来处理同一个查询字符串变量的多个值,因此您会看到类似:的信息 ...?var[]=1&var[]=3&...
。AFAIK,这是唯一以这种方式处理的Web框架。简而言之:可以隐藏您在后端使用的语言。一个简单的例子:考虑一个“ Hello World”页面;弄清楚后端使用的是哪种框架/语言是非常困难的(假设像会话cookie这样的基本内容是手动设置的或未使用的)。
但是,框架的目的是避免您不得不重新实现功能,并使您以标准化的方式工作。几乎所有的框架都有其特定的小故事,如果您看起来足够近的话,这些故事会消失的。正如其他人指出的那样,可以通过使用配置或重新实现各种标准功能来尝试隐藏这些功能。但是,我认为对于大型站点,要完全隐藏所有内容非常困难,即使您做到了,也将只使用很少的框架。
总而言之,我想说几乎总是可能对底层使用的东西有一个很好的了解(通过仔细的检查和询问)。隐藏使用的框架是可能的,但是对于大型站点而言,很快变得不可行。
前面的答案有一些框架和语言所具有的各种讲述故事的良好示例。我想补充一点,各种视图引擎具有特定的与空白相关的行为,可以用来识别它们。MVC3 +中使用的Razor引擎具有一些相当具体的怪癖,可以用来识别它,或者至少缩小犯罪嫌疑人的范围(再次,您可以回避它,但是,您在使用它吗?)。
我不知道这是否能具体回答您的问题,但是有一个对我真正有用的工具:Wappalyzer。这是一个Firefox / Chrome扩展程序,可发现网站上使用的技术。它检测内容管理系统,Web服务器,JavaScript框架,分析工具以及许多其他工具。我知道您所寻找的不完全是什么,但是它使您对网站的用途有了一个非常接近的了解。这就是对程序员的显示。stackexchange.com
可以通过这种方式编写站点,以使客户端看不到有关服务器技术的任何线索。
然而,当有人使用一些框架,比如ICEfaces的用于Java的,实际上是不可能做这样做,因为你会看到类似的东西在你的请求:
ice.submit.partial=true&ice.session=c4f4jxT36tM_38848488&ice.view=3&ice.focus=&rand=0.322803445
许多其他框架在页面正文或请求/响应中都有其特征标记。找到他们,谷歌,你会得到答案。
但是,在每种语言中,如果您选择从头开始创建HTML(在Java世界中,示例就是“ 速度模板”)或选择纯AJAX方式,即服务器仅返回/接受JSON消息,而客户端完全使用JavaScript,这是一种很难的方式,直到导致显示技术不足的异常。
.php
到用C编写的CGI脚本或用Java编写的Servlet。