Est-il possible de savoir quel langage de programmation un site Web utilise?

48

Par exemple, stackexchange.comsans demander au propriétaire du site ou à Google de lui fournir des informations sur le développement du site Web, est-il possible de savoir quelle langue est utilisée dans le back-end?

On dirait que le site Web n'a pas de .extensionbarre, par exemple .phpqui peut indiquer ce qui est développé dans PHP, mais sans l'extension, comment puis-je savoir cela?

Ted Wong
la source
43
Il convient de noter qu'il n'est pas nécessaire que l'extension d'un fichier demandé par URL corresponde directement à un fichier du système de fichiers. On peut très facilement mapper une extension comme .phpun script CGI écrit en C ou un Servlet écrit en Java.
maple_shaft
1
@Jeroen Community Wiki n'est pas censé être utilisé comme vous le proposez . Je sais qu'il a souvent été maltraité en tant que tel dans le passé, mais essayons de l'oublier ...
yannis
6
Strictement parlant, c'est impossible. La plupart des langues peuvent imiter complètement une autre langue, y compris tous les signes révélateurs que vous recherchez.
emory
2
De mon point de vue naïf, je ne peux pas voir une application de cette information. Que feriez-vous avec cette information?
Tehnyit
5
Trouver des sites vulnérables aux exploits.
Erik Reppen

Réponses:

82

Il y a des indicateurs. Certains sont plus faciles à trouver, d'autres sont plus difficiles.

  • extensions de fichier: .phpindique que le site est écrit en PHP, .aspindique un ASP classique, .aspxindique ASP.NET, .jspindique des fichiers JSP Java, ...
  • noms de cookie: nom de cookie JSESSIONIDlargement utilisé dans les serveurs Java
  • en-têtes: certains systèmes ajoutent des en-têtes HTTP à leurs réponses
  • contenu HTML spécifique:
    • des modèles tels que de nombreux div-wrappers avec un schéma de nommage de classe cohérent utilisé par les CMS comme Drupal.
    • des commentaires dans les balises HTML ou méta dans la tête indiquant directement / indirectement l'utilisation de l'outil
  • Messages d'erreur par défaut ou conception de page d'erreur (par exemple, ping d'une fausse URL pour voir leur 404)
  • Parfois, des balises de commentaire sont placées dans la page à des fins de gestion de version, ce qui fournit un indice
  • ...

Mais tous ces éléments peuvent être supprimés / modifiés / falsifiés. Certains sont plus faciles à changer que d'autres, mais aucun n'est fiable à 100%.

Il y a plusieurs raisons pour changer ces indicateurs:

  • Vous changez la technologie sous-jacente mais vous ne voulez pas changer vos URL
  • Vous voulez donner le moins d'informations possible sur votre technologie
  • (lié à précédent) Vous préférez ne pas être le premier arrêt du script kiddie bus lorsque des vulnérabilités connues à l'échelle de la plate-forme sont découvertes / publiées
  • Vous voulez apparaître "in" (même si cela signifie actuellement avoir des URL de style REST sans extension).
  • ...
Joachim Sauer
la source
11
L'équivalent de PHP JSESSIONIDest PHPSESSID.
Yannis
6
Il existe de nombreux outils d'analyse, par exemple wappalyzer.com
user123444555621
1
Vient de tester wappalyzer sur un site Django - la seule chose détectée est JQuery et Google Analytics. Et un site PHP avec un cadre interne, où il n'a rien détecté.
vartec
Trop minutieux pour ajouter ma propre réponse. J'ajouterais également des modèles HTML (les CMS, en particulier, ont tendance à ajouter de nombreux wrappers avec des classes constamment nommées) et de nombreux outils (principalement de mauvaise qualité), comme pour annoncer qu'ils ont été utilisés dans des balises méta (également des commentaires, mais a été mentionné).
Erik Reppen
1
@OP, je voudrais certainement cibler les cookies de session comme premier moyen d'essayer de déterminer ce qui est utilisé dans un système automatisé. C'est une chose que les cadres moins évidents sont susceptibles de montrer de manière constante, mais comme dit, rien n'est fiable à 100%.
Erik Reppen
8

Eh bien, il existe un fichier human.txt qu'un développeur peut mettre en place sur le domaine et qui donne des informations sur le développement du site, peut-être qui a travaillé dessus et quels standards ou outils ont été utilisés. S'ils veulent que vous sachiez ce genre d'information, ils pourraient / devraient le mettre ici. Cependant, comme pour toute autre chose, il est facultatif et ne peut donc pas vous informer. Découvrez les humains.text

Dandre Allison
la source
4

Non, cela pourrait être difficile, voire impossible, si le webmaster ne veut pas divulguer. Il existe certaines caractéristiques de quelques cadres, mais ils peuvent être cachés.

  • extensions de fichiers: il n'y a pas vraiment de raison d'utiliser les standards, et la plupart des MVC modernes utilisent quand même le routage d'URL. Donc, à moins que le site existe depuis un certain temps, vous n’allez probablement pas en voir (par exemple, stackexchange n’utilise pas d’ .aspxextension);

  • ID de session: par exemple, PHPSESSIDc'est PHP par défaut, mais peut être facilement remplacé ;

  • en-têtes avec versions de serveur Web et de langage de script: peuvent être désactivés, voire simulés.

Des choses plus difficiles à cacher:

  • Gère PHP valeurs multiples pour une même variable de chaîne de requête en ajoutant []au nom, vous voulez donc voir quelque chose comme: ...?var[]=1&var[]=3&.... Autant que je sache, c'est le seul framework Web qui le gère de cette façon.
vartec
la source
Vous appelez PHP un framework web? C'est plus un langage complet de Turing qui peut être utilisé pour faire plus que des choses sur le Web (bien qu'il ne soit généralement pas utilisé comme tel)
sakisk
@faif: dans toute autre langue, l'analyse de la chaîne de requête fait partie de l'infrastructure Web. Même Rasmus Lerdorf considère PHP comme un framework web. Vous connaissez mieux que l'auteur?
vartec
C’est ce qu’il pensait au départ, mais je pense que PHP peut faire beaucoup plus aujourd’hui. Pour être correct, je n'appellerais pas PHP un framework web. Dans ce cas, qu'est-ce que CakePHP, codeigniter, etc.? Les cadres Web du cadre Web? :)
sakisk
1
Je ne comprends pas votre point. PHP est un langage qui a la fonctionnalité principale d'un framework web intégré dans le langage lui-même. Faites avec.
vartec
4

En bref: il est possible de masquer la langue que vous utilisez sur le back-end. Exemple trivial: considérons une page "Hello World"; il serait extrêmement difficile de déterminer quel langage / cadre était utilisé sur le back-end (en supposant que les éléments de base tels que les cookies de session sont définis manuellement ou ne sont pas utilisés).

Cependant, l’intérêt des frameworks est de vous éviter d’avoir à ré-implémenter des fonctionnalités et de vous faire travailler de manière standardisée. Presque tous les cadres ont leurs petits témoins spécifiques qui les trahiront, si vous regardez suffisamment près. Comme d'autres l'ont fait remarquer, il est possible d'essayer de les masquer en utilisant la configuration ou en réimplémentant diverses fonctionnalités standard. Néanmoins, je dirais que pour les grands sites, il serait extrêmement difficile de tout cacher, et même si vous y parveniez, vous utiliseriez très peu de votre framework.

En résumé, je dirais qu'il est presque toujours possible d'avoir une très bonne idée de ce qui est utilisé en dessous (avec un examen minutieux et un encouragement). Masquer le cadre utilisé est possible, mais devient rapidement irréalisable pour les grands sites.

Les réponses précédentes ont de bons exemples de divers témoignages qu'ont les cadres et les langues. Je voudrais ajouter que différents moteurs de vue ont un comportement spécifique lié aux espaces qui peut être utilisé pour les identifier. Le moteur Razor utilisé dans MVC3 + a quelques particularités assez spécifiques qui peuvent être utilisées pour l'identifier, ou au moins pour réduire la liste des suspects (encore une fois, vous pouvez le contourner, mais ensuite, l'utilisez-vous?).

Daniel B
la source
4

Je ne sais pas si cela répond spécifiquement à votre question, mais il existe un outil qui m'a vraiment aidé: Wappalyzer . C'est une extension Firefox / Chrome qui dévoile les technologies utilisées sur les sites Web. Il détecte les systèmes de gestion de contenu, les serveurs Web, les frameworks JavaScript, les outils d'analyse et bien d'autres. Je sais que ce n'est pas précisément ce que vous recherchez, mais cela vous donne une idée très précise de l'utilisation d'un site. Voici ce que cela montre pour programmers.stackexchange.com

Wappalyzer

Ither
la source
Ha ha, j'ai visité mon blog et il est écrit Apache 2 / PHP 5.5.9, mais je suis presque sûr qu'il s'agit d'un blog ASP.NET MVC, parce que je l'ai créé. Parce que, pour des raisons de traîne, j'ai changé l'en-tête de réponse 'X-Powered-By: ASP.NET' en PHP.
Lars
1

Il est possible d’écrire un site de telle manière qu’aucun indice sur la technologie du serveur ne soit visible pour le client.

Cependant, lorsque quelqu'un utilise certains frameworks, tels que IceFaces pour Java , il est pratiquement impossible de le faire car vous verrez quelque chose comme ça dans vos requêtes:

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

La plupart des autres cadres ont leurs marques caractéristiques dans le corps de la page ou dans les demandes / réponses. Trouvez-les, google et vous aurez une réponse.

Cependant, dans chaque langue, si vous choisissez de créer du HTML à partir de rien (dans le monde Java, par exemple, les modèles de vélocité ) ou si vous choisissez la méthode AJAX pure, le serveur renvoie / accepte uniquement les messages JSON, et le client est entièrement en JavaScript, ce qui est difficile. , jusqu’à ce que vous provoquiez une exception non détectée qui révèle la technologie utilisée.

Marin danubien
la source
0

Sur les sites qui utilisent une structure complète ou un système de gestion de contenu, vous pouvez parfois essayer d'interroger la page d'administrateur, une boîte de connexion vous est présentée et vous permet d'identifier la structure d'origine car la plupart des gens ne redéfinissent pas le modèle d'administrateur. Par exemple, si votre site est exemple.com, essayez d’exemple à exemple.com/admin/ ou exemple.com/wp-admin/ (wordpress).

Lie Ryan
la source
-5

Non, il n'est pas possible de trouver la langue utilisée sur les sites Web en affichant le code source de la page Web et en recherchant l'existence de langues. en raison de l'utilisation de plusieurs langues pour la création de sites Web offrant une sécurité élevée

Chehu
la source