Kann man wissen, welche Programmiersprache eine Website verwendet?

48

Ist es beispielsweise stackexchange.commöglich, zu wissen, welche Sprache im Back-End verwendet wird , ohne den Websitebesitzer oder Google nach deren Informationen zur Entwicklung der Website zu fragen?

Scheint, die Website hat keine .extensionLeiste, die zum Beispiel .phpanzeigen kann, welche in entwickelt ist PHP, aber ohne die Erweiterung, woher kann ich das wissen?

Ted Wong
quelle
43
Es ist zu beachten, dass die Erweiterung einer angeforderten Datei per URL nicht direkt einer Datei im Dateisystem zugeordnet werden muss. Man kann eine Erweiterung wie .phpein in C geschriebenes CGI-Skript oder ein in Java geschriebenes Servlet recht einfach abbilden .
maple_shaft
1
Das @ Jeroen Community Wiki darf nicht so verwendet werden, wie Sie es vorschlagen . Ich weiß, dass es in der Vergangenheit häufig als solches missbraucht wurde, aber lassen Sie uns versuchen, das zu vergessen ...
yannis
6
Genau genommen ist es unmöglich. Fast jede Sprache kann eine andere Sprache vollständig emulieren - einschließlich aller "Tell Tale" -Zeichen, nach denen Sie suchen.
Emory
2
Aus meiner naiven Perspektive kann ich keine Anwendung dieser Informationen sehen. Was würden Sie mit diesen Informationen machen?
tehnyit
5
Suchen von Websites, die für Exploits anfällig sind.
Erik Reppen

Antworten:

82

Es gibt Indikatoren. Einige sind leichter zu finden, andere schwerer.

  • Dateierweiterungen: .phpZeigt an, dass die Site in PHP geschrieben ist, .aspzeigt klassisches ASP an, .aspxzeigt ASP.NET an, .jspzeigt Java JSPs an, ...
  • Cookie-Namen: JSESSIONIDist ein in Java-Servern weit verbreiteter Cookie-Name
  • Header: Einige Systeme fügen ihren Antworten HTTP-Header hinzu
  • spezifischer HTML-Inhalt:
    • Muster wie viele Div-Wrapper mit einem einheitlichen Klassennamensschema, wie es von CMS wie Drupal verwendet wird.
    • Kommentare in den HTML- oder Meta-Tags im Kopf zeigen direkt / indirekt die Werkzeugnutzung an
  • Standardfehlermeldungen oder Fehlerseitengestaltung (z. B. Pingen einer gefälschten URL, um ihre 404 zu sehen)
  • Manchmal werden zu Versionszwecken Kommentar-Tags in die Seite eingefügt, die einen Hinweis liefern
  • ...

Aber all diese können entfernt / geändert / gefälscht werden. Einige sind einfacher zu ändern als andere, aber keine ist zu 100% zuverlässig.

Es gibt verschiedene Gründe, diese Indikatoren zu ändern:

  • Sie ändern die zugrunde liegende Technologie, möchten aber Ihre URLs nicht ändern
  • Sie möchten so wenig Informationen wie möglich über Ihre Technologie geben
  • (im Zusammenhang mit früheren) Sie möchten lieber nicht die erste Station für den Script Kiddie Bus sein, wenn bekannte plattformweite Sicherheitslücken entdeckt / veröffentlicht werden
  • Sie möchten "in" erscheinen (obwohl dies derzeit bedeutet, dass Sie URLs ohne REST-Erweiterung haben).
  • ...
Joachim Sauer
quelle
11
Das PHP-Äquivalent zu JSESSIONIDist PHPSESSID.
Yannis
6
Es gibt zahlreiche Tools, die die Analyse durchführen, zum Beispiel wappalyzer.com
user123444555621
1
Soeben getesteter Wappalyzer auf einer Django-Site - das einzige, was erkannt wurde, waren JQuery und Google Analytics. Und eine PHP-Site mit internem Framework, auf der überhaupt nichts erkannt wurde.
Vartec
Zu gründlich, um meine eigene Antwort hinzuzufügen. Ich würde auch HTML-Muster hinzufügen (insbesondere CMSs fügen häufig Garbage-Wrapper mit konsistent benannten Klassen hinzu) und viele (meist beschissene) Tools möchten ankündigen, dass sie in Meta-Tags verwendet wurden (aber auch Kommentare) wurde erwähnt).
Erik Reppen
1
@OP, ich würde auf jeden Fall Session-Cookies als erste Möglichkeit verwenden, um herauszufinden, was in einem automatisierten System verwendet wird. Das ist eine Sache, die die weniger offensichtlichen Frameworks wahrscheinlich beständig zeigen, aber wie gesagt, nichts ist 100% zuverlässig.
Erik Reppen
8

Nun, es gibt die Datei humans.txt, die ein Entwickler in der Domäne einrichten kann und die einige Informationen über die Website-Entwicklung enthält, möglicherweise darüber, wer daran gearbeitet hat und welche Standards oder Tools verwendet wurden. Wenn sie möchten, dass Sie über diese Art von Informationen Bescheid wissen, könnten / sollten sie diese dort ablegen. Dies ist jedoch wie alles andere optional, so dass es auch nicht garantiert werden kann, Sie zu informieren. Probieren Sie humans.text aus

Dandre Allison
quelle
4

Nein, es könnte ziemlich schwierig, wenn nicht unmöglich sein, wenn der Webmaster nichts preisgeben möchte. Es gibt einige Merkmale weniger Frameworks, die jedoch ausgeblendet werden können.

  • Dateierweiterungen: Es gibt keinen wirklichen Grund, Standard-MVCs zu verwenden, und die meisten modernen MVCs verwenden ohnehin URL-Routing. Wenn es die Site nicht schon länger gibt, werden Sie wahrscheinlich keine finden (zB stackexchange verwendet keine .aspxErweiterung).

  • Sitzungs-IDs: Dies ist beispielsweise PHPSESSIDdie Standardeinstellung für PHP, kann jedoch leicht überschrieben werden .

  • Header mit Webserver- und Skriptsprachenversionen: können deaktiviert oder sogar gefälscht werden.

Sachen, die schwerer zu verbergen sind:

  • PHP verarbeitet mehrere Werte für dieselbe Abfragezeichenfolgenvariable, indem es []an den Namen anhängt ...?var[]=1&var[]=3&.... AFAIK, es ist das einzige Web-Framework, das das so macht.
vartec
quelle
Nennen Sie PHP ein Webframework? Es ist eher eine Turing-vollständige Sprache, die für mehr als nur Web-
Dinge
@faif: In jeder anderen Sprache ist die Syntaxanalyse der Abfragezeichenfolge Teil des Web-Frameworks. Selbst Rasmus Lerdorf betrachtet PHP als Webframework. Sie wissen es besser als der Autor?
Vartec
Das hatte er ursprünglich im Sinn, aber ich denke, dass PHP heute viel mehr kann. Aus Gründen der Korrektheit würde ich PHP nicht als Webframework bezeichnen. Was sind in diesem Fall CakePHP, Codeigniter usw.? Web-Frameworks des Web-Frameworks? :)
Sakisk
1
Ich verstehe deinen Standpunkt nicht. PHP ist eine Sprache, deren Kernfunktionalität in einem in die Sprache selbst eingebetteten Webframework liegt. Komm damit klar.
Vartec
4

Kurz gesagt: Es ist möglich zu verbergen, welche Sprache Sie im Backend verwenden. Triviales Beispiel: Betrachten Sie eine "Hello World" -Seite. Es wäre äußerst schwierig herauszufinden, welches Framework / welche Sprache im Back-End verwendet wurde (vorausgesetzt, die grundlegenden Dinge wie Sitzungscookies werden manuell festgelegt oder werden nicht verwendet).

Der Sinn von Frameworks besteht jedoch darin, dass Sie die Funktionalität nicht erneut implementieren müssen und standardisiert arbeiten müssen. Fast alle Frameworks haben ihre eigenen kleinen Geschichten, die sie verraten, wenn Sie genau hinsehen. Wie bereits erwähnt, können Sie versuchen, diese auszublenden, indem Sie verschiedene Standardfunktionen konfigurieren oder neu implementieren. Trotzdem würde ich behaupten, dass es für große Websites äußerst schwierig sein würde, alles vollständig zu verbergen, und selbst wenn Sie dies erreichen würden, würden Sie nur sehr wenig von Ihrem Framework verwenden.

Zusammenfassend würde ich sagen, dass es fast immer möglich ist, eine sehr gute Vorstellung davon zu bekommen, was darunter verwendet wird (mit einigen sorgfältigen Untersuchungen und Stößen). Das Verbergen des verwendeten Frameworks ist möglich, wird jedoch für große Sites schnell unmöglich.

Die vorherigen Antworten enthalten einige gute Beispiele für verschiedene Erzählungen, die Frameworks und Sprachen haben. Ich möchte hinzufügen, dass verschiedene Ansichtsmodule ein spezifisches Verhalten in Bezug auf Leerzeichen aufweisen, mit dem sie identifiziert werden können. Die in MVC3 + verwendete Razor-Engine weist einige ziemlich spezifische Besonderheiten auf, die verwendet werden könnten, um sie zu identifizieren oder zumindest die Liste der Verdächtigen einzugrenzen (Sie können sie erneut umgehen, aber verwenden Sie sie dann?).

Daniel B
quelle
4

Ich weiß nicht, ob dies speziell Ihre Frage beantwortet, aber es gibt ein Tool, das mir wirklich geholfen hat: Wappalyzer . Es ist eine Firefox / Chrome-Erweiterung, die die auf Websites verwendeten Technologien aufdeckt. Es erkennt Content-Management-Systeme, Webserver, JavaScript-Frameworks, Analysetools und viele andere. Ich weiß, es ist nicht genau das, wonach Sie suchen, aber es gibt Ihnen eine sehr genaue Vorstellung davon, was eine Website verwendet. Dies ist, was es für programmers.stackexchange.com zeigt

Wappalyzer

Ither
quelle
Ha ha, ich habe mein Blog besucht und es heißt Apache 2 / PHP 5.5.9, aber ich bin mir ziemlich sicher, dass es sich um ein ASP.NET MVC-Blog handelt, weil ich es erstellt habe. Weil ich aus Trolling-Gründen den Antwortheader 'X-Powered-By: ASP.NET' auf PHP geändert habe.
Lars
1

Es ist möglich, eine Site so zu schreiben, dass für den Client keine Hinweise auf die Servertechnologie sichtbar sind.

Wenn jedoch jemand ein Framework wie IceFaces für Java verwendet , ist dies praktisch unmöglich, da in Ihren Anforderungen etwa Folgendes angezeigt wird:

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

Viele andere Frameworks haben ihre charakteristischen Stempel entweder im Seitenkörper oder in Anfragen / Antworten. Finden Sie sie, google und Sie werden eine Antwort haben.

Wenn Sie jedoch in jeder Sprache HTML von Grund auf neu erstellen (in der Java-Welt wären dies beispielsweise Velocity- Vorlagen) oder sich für einen reinen AJAX-Weg entscheiden, bei dem der Server nur JSON-Nachrichten zurückgibt / akzeptiert und der Client vollständig in JavaScript arbeitet - ein schwieriger Weg , bis Sie eine nicht erfasste Ausnahme verursachen, unter der die Technologie sichtbar wird.

Donau Seemann
quelle
0

Auf Websites, die ein vollständiges Framework oder ein CMS verwenden, können Sie manchmal versuchen, die Admin-Seite abzufragen. Dann wird ein Anmeldefeld angezeigt, in dem angegeben wird, von welchem ​​Framework es stammt, da die meisten Benutzer die Admin-Vorlage nicht reskinen. Wenn Ihre Site beispielsweise example.com lautet, rufen Sie example.com/admin/ oder example.com/wp-admin/ (WordPress) auf.

Lüge Ryan
quelle
-5

Nein, es ist nicht möglich, die auf den Websites verwendete Sprache durch Anzeigen des Quellcodes der Webseite und Durchsuchen der vorhandenen Sprachen zu finden. Aufgrund der Verwendung von mehr als einer Sprache zur Erstellung einer Website, um eine hohe Sicherheit zu gewährleisten

chehu
quelle