web-dev-qa-db-fra.com

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

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

Il semble que le site Web n'ait pas .extension bar, par exemple .php qui peut indiquer lequel est développé dans PHP, mais sans l'extension, comment puis-je le savoir?

48
Ted Wong

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

  • extensions de fichier: .php indique que le site est écrit en PHP, .asp indique un ASP classique, .aspx indique ASP.NET, .jsp indique Java JSP, ...
  • noms de cookies: JSESSIONID est un nom de cookie largement 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 wrappers div avec un schéma de dénomination de classe cohérent tel qu'utilisé par des CMS comme Drupal.
    • 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, cingler une fausse URL pour voir leur 404)
  • Parfois, des balises de commentaire sont placées dans la page à des fins de version qui fournissent un indice
  • ...

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

Il existe plusieurs raisons de modifier ces indicateurs:

  • Vous modifiez la technologie sous-jacente mais ne souhaitez pas modifier vos URL
  • Vous souhaitez donner le moins d'informations possible sur votre technologie
  • (lié à la précédente) Vous préférez ne pas être le premier arrêt pour le bus de script kiddie lorsque des vulnérabilités connues à l'échelle de la plate-forme sont découvertes/publiées
  • Vous voulez apparaître "dans" (même si cela signifie actuellement avoir des URL de type REST sans extension).
  • ...
82
Joachim Sauer

Eh bien, il y a le fichier humains.txt qu'un développeur peut mettre sur le domaine qui donne des informations sur le développement du site, peut-être qui y a travaillé et quelles normes ou outils ont été utilisés. S'ils veulent que vous sachiez ce genre d'informations, ils pourraient/devraient les mettre là. Cependant, comme toute autre chose, cela est facultatif, il ne peut donc pas non plus vous informer. Découvrez humains.text

8
Dandre Allison

En bref: il est possible de masquer la langue que vous utilisez sur le back-end. Exemple trivial: considérez une page "Hello World"; il serait extrêmement difficile de comprendre quel framework/langage était utilisé sur le back-end (en supposant que les éléments de base comme les cookies de session sont définis manuellement ou non 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 frameworks ont leurs petits témoins spécifiques qui les dévoileront, si vous regardez assez près. Comme d'autres l'ont souligné, 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 complètement, et même si vous accomplissiez cela, vous utiliseriez très peu de votre cadre.

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 attentif et une incitation). Cacher le cadre utilisé est possible, mais devient rapidement irréalisable pour les grands sites.

Les réponses précédentes contiennent de bons exemples de divers témoins dont disposent les frameworks et les langages. Je voudrais ajouter que divers moteurs de vue ont un comportement spécifique lié aux espaces blancs qui peut être utilisé pour les identifier. Le moteur Razor utilisé dans MVC3 + a des bizarreries assez spécifiques qui pourraient être utilisées pour l'identifier, ou du moins, réduire la liste des suspects (encore une fois, vous pouvez le contourner, mais alors, l'utilisez-vous?).

4
Daniel B

Je ne sais pas si cela répond spécifiquement à votre question mais il y a un outil qui m'a vraiment aidé: Wappalyzer . Il s'agit d'une extension Firefox/Chrome qui découvre 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 exactement ce que vous recherchez, mais cela vous donne une idée très précise de l'utilisation d'un site. C'est ce que cela montre pour programmers.stackexchange.com

Wappalyzer

4
Ither

Non, cela pourrait être difficile voire impossible si le webmaster ne veut pas divulguer. Il existe certaines caractéristiques de quelques frameworks, mais elles peuvent être masquées.

  • extensions de fichier: il n'y a aucune raison réelle d'utiliser des extensions standard, et la plupart des MVC modernes utilisent de toute façon le routage d'URL. Donc, sauf si le site existe depuis un certain temps, vous n'en verrez probablement pas (par exemple, stackexchange n'utilise pas .aspx extension);

  • iD de session: par exemple PHPSESSID est par défaut pour PHP, mais peut être facilement remplacé ;

  • en-têtes avec serveur Web et versions de langage de script: peuvent être désactivés ou même truqués.

Des trucs plus difficiles à cacher:

  • PHP gère plusieurs valeurs pour la même variable de chaîne de requête en ajoutant [] au nom, ainsi vous verriez quelque chose comme: ...?var[]=1&var[]=3&.... AFAIK, c'est le seul framework web qui le gère de cette façon.
4
vartec

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 demandes:

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

La plupart des autres cadres ont leurs cachets caractéristiques dans le corps de la page ou 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 zéro (dans Java monde, un exemple serait vélocité modèles) ou choisissez pur AJAX façon, où le serveur retourne/accepte uniquement les messages JSON, et le client est entièrement en JavaScript - un moyen difficile, jusqu'à ce que vous provoquiez une exception non capturée qui révèle la technologie sous.

1
Danubian Sailor

Sur les sites qui utilisent un framework ou un CMS à part entière, vous pouvez parfois essayer d'interroger la page d'administration, vous verrez une boîte de connexion et identifier de quel framework il provient car la plupart des gens ne redéfinissent pas le modèle d'administration. Par exemple, si votre site est example.com, essayez d'accéder à example.com/admin/ ou example.com/wp-admin/ (wordpress).

0
Lie Ryan