是否可以知道网站使用哪种编程语言?


48

例如,stackexchange.com无需向网站所有者或Google询问有关开发网站的信息,这是否可能知道后端使用了哪种语言?

似乎,网站没有.extension栏,例如.php可以指示开发于的栏,PHP但没有扩展名,我怎么知道呢?


43
应该注意的是,URL请求的文件扩展名不必直接映射到文件系统上的文件。可以很容易地将扩展名映射.php到用C编写的CGI脚本或用Java编写的Servlet。
maple_shaft

1
@Jeroen Community Wiki 不应该按照您的建议使用。我知道过去它经常被滥用,但让我们试着忘记这一点……
yannis 2012年

6
严格来说这是不可能的。大多数任何语言都可以完全模仿另一种语言-包括您可能正在寻找的任何“故事”标志。
emory 2012年

2
从我幼稚的角度来看,我看不到此信息的应用。您将如何处理此信息?
tehnyit 2012年

5
此外,查找容易受到攻击的站点。
Erik Reppen 2012年

Answers:


82

有指标。有些更容易找到,有些则更难。

  • 文件扩展名:.php表示该网站是用PHP编写的,.asp表示经典的ASP,.aspx表示ASP.NET,.jsp表示Java JSP,...
  • cookie名称:JSESSIONID是Java服务器中广泛使用的cookie名称
  • 标头:某些系统在其响应中添加HTTP标头
  • 特定的HTML内容:
    • 模式,例如像drupal这样的CMS使用具有一致的类命名方案的许多div包装器。
    • HTML或头部的meta标记中的注释直接/间接指示工具使用情况
  • 默认错误消息或错误页面设计(例如ping伪造的URL以查看其404)
  • 有时,注释标签会放置在页面中以进行版本控制,从而提供线索
  • ...

但是所有这些都可以删除/更改/伪造。有些更改比其他更改更容易,但是没有100%可靠。

更改这些指标有多种原因:

  • 您更改了基础技术,但不想更改您的URL
  • 您想提供尽可能少的技术信息
  • (与上一版本相关)当发现/公开了已知的平台范围的漏洞时,您最好不要成为脚本小子总线的第一站
  • 您希望看起来像是“在”(即使“尽管”这意味着目前具有无扩展名的REST风格的URL)。
  • ...

11
在PHP相当于JSESSIONIDPHPSESSID
yannis 2012年

6
有很多工具可以进行分析,例如wappalyzer.com
user123444555621 2012年

1
刚刚在Django网站上测试了wappalyzer-它检测到的唯一东西是JQuery和Google Analytics(分析)。带有内部框架的PHP站点,在此站点什么也没发现。
vartec 2012年

太彻底了,无法添加我自己的答案。我还要添加HTML模式(特别是CMS往往会添加具有相同名称的类的大量垃圾包装)和许多(大多是糟糕的)工具,例如宣布它们已在元标记中使用(也包括注释),但是被提及)。
Erik Reppen 2012年

1
@OP,我肯定会以会话cookie为目标,以此来尝试找出自动化系统中正在使用的内容。那是一件事,不太明显的框架很可能会始终如一地显示出来,但是如上所述,没有什么是100%可靠的。
Erik Reppen 2012年

8

好的,开发人员可以在该域上放置humans.txt文件,该文件提供有关站点开发的一些信息,也许是谁进行站点开发以及使用了哪些标准或工具。如果他们希望您知道这些信息,则可以/应该将其放在那里。但是,就像其他任何东西一样,它是可选的,因此也不能保证会通知您。查看humans.text


4

不,如果网站站长不想透露,可能会相当困难,即使不是不可能。少数框架具有某些特征,但可以隐藏。

  • 文件扩展名:没有真正的理由使用标准文件扩展名,并且大多数现代MVC仍然使用URL路由。因此,除非站点已经存在了一段时间,否则您可能看不到任何东西(例如stackexchange不使用.aspx扩展名);

  • 会话ID:例如PHPSESSIDPHP的默认ID ,但可以轻松覆盖

  • 具有Web服务器和脚本语言版本的标头:可以关闭甚至伪造。

难以隐藏的东西:

  • PHP通过[]在名称后附加一个名称来处理同一个查询字符串变量的多个值,因此您会看到类似:的信息 ...?var[]=1&var[]=3&...。AFAIK,这是唯一以这种方式处理的Web框架。

您是否将PHP称为网络框架?它是一种图灵完备的语言,可用于网络工作之外的其他用途(尽管通常不这样使用)
sakisk 2014年

@faif:以任何其他语言解析查询字符串是Web框架的一部分。甚至Rasmus Lerdorf也认为PHP是一个Web框架。您比作者还了解吗?
vartec

那是他最初想到的,但是我认为PHP今天可以做的更多。为了正确起见,我不会将PHP称为Web框架。在那种情况下,CakePHP,codeigniter等是什么?Web框架的Web框架?:)
sakisk 2014年

1
我不明白你的意思。PHP是一种语言,具有嵌入在该语言本身中的Web框架的核心功能。处理它。
vartec

4

简而言之:可以隐藏您在后端使用的语言。一个简单的例子:考虑一个“ Hello World”页面;弄清楚后端使用的是哪种框架/语言是非常困难的(假设像会话cookie这样的基本内容是手动设置的或未使用的)。

但是,框架的目的是避免您不得不重新实现功能,并使您以标准化的方式工作。几乎所有的框架都有其特定的小故事,如果您看起来足够近的话,这些故事会消失的。正如其他人指出的那样,可以通过使用配置或重新实现各种标准功能来尝试隐藏这些功能。但是,我认为对于大型站点,要完全隐藏所有内容非常困难,即使您做到了,也将只使用很少的框架。

总而言之,我想说几乎总是可能对底层使用的东西有一个很好的了解(通过仔细的检查和询问)。隐藏使用的框架是可能的,但是对于大型站点而言,很快变得不可行。

前面的答案有一些框架和语言所具有的各种讲述故事的良好示例。我想补充一点,各种视图引擎具有特定的与空白相关的行为,可以用来识别它们。MVC3 +中使用的Razor引擎具有一些相当具体的怪癖,可以用来识别它,或者至少缩小犯罪嫌疑人的范围(再次,您可以回避它,但是,您在使用它吗?)。


4

我不知道这是否能具体回答您的问题,但是有一个对我真正有用的工具:Wappalyzer。这是一个Firefox / Chrome扩展程序,可发现网站上使用的技术。它检测内容管理系统,Web服务器,JavaScript框架,分析工具以及许多其他工具。我知道您所寻找的不完全是什么,但是它使您对网站的用途有了一个非常接近的了解。这就是对程序员的显示。stackexchange.com

Wappalyzer


哈哈,我访问了我的博客,上面写着Apache 2 / PHP 5.5.9,但是我很确定它是您自己拥有的ASP.NET MVC博客,因为我做到了。因为出于拖钓的原因,我已将“ X-Powered-By:ASP.NET”响应标头更改为PHP。
拉斯

1

可以通过这种方式编写站点,以使客户端看不到有关服务器技术的任何线索。

然而,当有人使用一些框架,比如ICEfaces的用于Java的,实际上是不可能做这样做,因为你会看到类似的东西在你的请求:

ice.submit.partial=true&ice.session=c4f4jxT36tM_38848488&ice.view=3&ice.focus=&rand=0.322803445

许多其他框架在页面正文或请求/响应中都有其特征标记。找到他们,谷歌,你会得到答案。

但是,在每种语言中,如果您选择从头开始创建HTML(在Java世界中,示例就是“ 速度模板”)或选择纯AJAX方式,即服务器仅返回/接受JSON消息,而客户端完全使用JavaScript,这是一种很难的方式,直到导致显示技术不足的异常。


0

在使用功能完善的框架或CMS的网站上,有时您可以尝试查询管理页面,系统会显示一个登录框并确定其来自哪个框架,因为大多数人都不会重新设计管理模板。例如,如果您的网站是example.com,请尝试转到example.com/admin/或example.com/wp-admin/(wordpress)。



-5

不,不可能通过查看网页的源代码并搜索语言的存在来找到网站中使用的语言。因为使用了多种语言来创建网站以提供高安全性

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.