¿Es posible saber qué lenguaje de programación utiliza un sitio web?

48

Por ejemplo, stackexchange.comsin preguntar al propietario del sitio o a Google su información sobre el desarrollo del sitio web, ¿es posible saber qué idioma se utiliza en el back-end?

Parece que el sitio web no tiene .extensionbarra, por ejemplo, .phpque puede indicar cuál está desarrollado PHP, pero sin la extensión, ¿cómo puedo saber eso?

Ted Wong
fuente
43
Cabe señalar que la extensión de un archivo solicitado por URL no necesita asignarse directamente a un archivo en el sistema de archivos. Uno puede mapear fácilmente una extensión como .phpun CGI-Script escrito en C o un Servlet escrito en Java.
maple_shaft
1
No se supone que @Jeroen Community Wiki se use como usted propone . Sé que fue abusado comúnmente como tal en el pasado, pero tratemos de olvidarnos de eso ...
Yannis
66
Estrictamente hablando es imposible. La mayoría de los idiomas pueden emular completamente otro idioma, incluidos los signos de "cuento" que pueda estar buscando.
emory
2
Desde mi ingenua perspectiva, no puedo ver una aplicación de esta información. ¿Qué harías con esta información?
tehnyit
55
Además, encontrar sitios vulnerables a los exploits.
Erik Reppen

Respuestas:

82

Hay indicadores. Algunos son más fáciles de encontrar, otros son más difíciles.

  • extensiones de archivo: .phpindica que el sitio está escrito en PHP, .aspindica ASP clásico, .aspxindica ASP.NET, .jspindica Java JSP, ...
  • nombres de cookies: JSESSIONIDes un nombre de cookie ampliamente utilizado en servidores Java
  • encabezados: algunos sistemas agregan encabezados HTTP a sus respuestas
  • contenido HTML específico:
    • patrones tales como muchos envoltorios div con un esquema consistente de nombres de clases como el utilizado por CMS como Drupal.
    • comentarios en HTML o metaetiquetas en el encabezado indicando directa / indirectamente el uso de la herramienta
  • Mensajes de error predeterminados o diseño de página de error (por ejemplo, hacer ping a una URL falsa para ver su 404)
  • A veces, las etiquetas de comentarios se colocan en la página para propósitos de versiones que proporcionan una pista
  • ...

Pero todo eso se puede eliminar / cambiar / falsificar. Algunos son más fáciles de cambiar que otros, pero ninguno es 100% confiable.

Hay varias razones para cambiar esos indicadores:

  • Cambia la tecnología subyacente pero no desea cambiar sus URL
  • Desea proporcionar la menor información posible sobre su tecnología.
  • (relacionado con el anterior) Preferiría no ser la primera parada para el script kiddie bus cuando se descubren / publiciten vulnerabilidades conocidas en toda la plataforma
  • Quiere parecer "en" (aunque eso actualmente significa tener URL de estilo REST sin extensiones).
  • ...
Joachim Sauer
fuente
11
El equivalente de PHP a JSESSIONIDes PHPSESSID.
Yannis
66
Existen numerosas herramientas para hacer el análisis, por ejemplo wappalyzer.com
user123444555621
1
Acabo de probar wappalyzer en un sitio de Django; lo único que detectó fue JQuery y Google Analytics. Y sitio PHP con marco interno, donde no detectó nada en absoluto.
vartec
Demasiado minucioso para agregar mi propia respuesta. También agregaría patrones HTML (los CMS en particular tienden a agregar muchos envoltorios de basura con clases con nombres consistentes) y muchas herramientas (en su mayoría deficientes) como para anunciar que se han utilizado en metaetiquetas (también comentarios, pero eso Fue mencionado).
Erik Reppen
1
@OP, definitivamente apuntaría a las cookies de sesión como la primera forma de tratar de resolver lo que está en uso en un sistema automatizado. Esa es una cosa que los marcos menos obvios probablemente mostrarán de manera consistente, pero como se dijo, nada es 100% confiable.
Erik Reppen
8

Bueno, está el archivo humans.txt que un desarrollador puede poner en el dominio que proporciona información sobre el desarrollo del sitio, tal vez quién trabajó en él y qué estándares o herramientas se usaron. Si quieren que sepas sobre ese tipo de información, podrían / ​​deberían ponerla allí. Sin embargo, al igual que cualquier otra cosa, esto es opcional, por lo que tampoco puede garantizarle informarle. Echa un vistazo a los humanos.text

Dandre Allison
fuente
4

No, podría ser bastante difícil si no imposible si el webmaster no quiere revelarlo. Hay algunas características de algunos marcos, pero se pueden ocultar.

  • extensiones de archivo: no hay una razón real para usar las estándar, y la mayoría de los MVC modernos usan enrutamiento de URL de todos modos. Entonces, a menos que el sitio haya existido por algún tiempo, probablemente no verá ninguno (por ejemplo, stackexchange no usa .aspxextensión);

  • ID de sesión: por ejemplo, PHPSESSIDes el predeterminado para PHP, pero se puede anular fácilmente ;

  • encabezados con servidor web y versiones de lenguaje de script: se pueden desactivar o incluso falsificar.

Cosas que son más difíciles de ocultar:

  • PHP maneja múltiples valores para una misma variable cadena de consulta añadiendo []al nombre, por lo que vería algo como: ...?var[]=1&var[]=3&.... AFAIK, es el único marco web que lo maneja de esa manera.
vartec
fuente
¿Estás llamando a PHP un marco web? Es más un lenguaje completo de Turing que se puede usar para hacer más que cosas web (aunque generalmente no se usa como tal)
sakisk
@faif: en cualquier otro idioma, la cadena de consulta de análisis forma parte del marco web. Incluso Rasmus Lerdorf considera que PHP es un marco web. ¿Sabes mejor que el autor?
vartec
Eso era lo que tenía en mente al principio, pero creo que PHP puede hacer mucho más hoy. Para ser correcto, no llamaría a PHP un marco web. En ese caso, ¿qué son CakePHP, codeigniter, etc.? ¿Marcos web del marco web? :)
sakisk
1
No entiendo tu punto. PHP es un lenguaje que tiene la funcionalidad central de un marco web integrado en el lenguaje mismo. Tratar con él.
vartec
4

En resumen: es posible ocultar qué idioma está utilizando en el back-end. Ejemplo trivial: considere una página de "Hola Mundo"; sería extremadamente difícil averiguar qué marco / lenguaje se estaba utilizando en el back-end (suponiendo que las cosas básicas como las cookies de sesión se configuran manualmente o no se usan).

Sin embargo, el objetivo de los marcos es ahorrarle la necesidad de volver a implementar la funcionalidad y hacer que trabaje de manera estandarizada. Casi todos los marcos tienen sus pequeños cuentos específicos que los delatarán, si miras lo suficientemente cerca. Como otros han señalado, es posible tratar de ocultarlos mediante el uso de la configuración o la implementación de varias características estándar. Sin embargo, argumentaría que para sitios grandes, sería extremadamente difícil ocultar completamente todo, e incluso si lo lograras, estarías usando muy poco de tu marco.

En resumen, yo diría que casi siempre es posible tener una muy buena idea de lo que se está usando debajo (con un examen cuidadoso y un pinchazo). Es posible ocultar el marco utilizado, pero rápidamente se vuelve inviable para sitios grandes.

Las respuestas anteriores tienen algunos buenos ejemplos de varios relatos que tienen los marcos y los idiomas. Me gustaría agregar que varios motores de vista tienen un comportamiento específico relacionado con espacios en blanco que se puede utilizar para identificarlos. El motor Razor utilizado en MVC3 + tiene algunas peculiaridades bastante específicas que podrían usarse para identificarlo, o al menos, reducir la lista de sospechosos (de nuevo, puedes esquivarlo, pero ¿lo estás usando?).

Daniel B
fuente
4

No sé si esto responde específicamente a su pregunta, pero hay una herramienta que me ayudó mucho: Wappalyzer . Es una extensión de Firefox / Chrome que descubre las tecnologías utilizadas en los sitios web. Detecta sistemas de gestión de contenido, servidores web, marcos de JavaScript, herramientas de análisis y muchos otros. Sé que no es precisamente lo que estás buscando, pero te da una idea muy cercana de lo que usa un sitio. Esto es lo que muestra para los programadores.stackexchange.com

Wappalyzer

Ither
fuente
Ja, ja, visité mi blog y dice Apache 2 / PHP 5.5.9, pero estoy bastante seguro de que es el blog ASP.NET MVC, porque lo hice. Porque por razones de trolling he cambiado el encabezado de respuesta 'X-Powered-By: ASP.NET' a PHP.
Lars
1

Es posible escribir un sitio de tal manera que el cliente no tenga pistas sobre la tecnología del servidor.

Sin embargo, cuando alguien usa algunos marcos, como IceFaces para Java , es prácticamente imposible hacerlo porque verá algo así en sus solicitudes:

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

Gran parte de otros marcos tienen sus sellos característicos en el cuerpo de la página o en las solicitudes / respuestas. Encuéntralos, google y tendrás una respuesta.

Sin embargo, en cada idioma, si elige crear HTML desde cero (en el mundo de Java, un ejemplo serían las plantillas de velocidad ) o elige la forma AJAX pura, donde el servidor devuelve / acepta solo mensajes JSON, y el cliente está completamente en JavaScript, una forma difícil , hasta que provoque una excepción no detectada que revele la tecnología que se encuentra debajo.

Marinero danubiano
fuente
0

En los sitios que usan un marco completo o CMS, a veces puede intentar consultar la página de administración, se le presentará un cuadro de inicio de sesión e identificará de qué marco proviene porque la mayoría de las personas no reskin la plantilla de administrador. Por ejemplo, si su sitio es example.com, intente ir a example.com/admin/ o example.com/wp-admin/ (wordpress).

Lie Ryan
fuente
-5

No, no es posible encontrar el idioma utilizado en los sitios web al ver el código fuente de la página web y buscar la existencia de idiomas. debido al uso de más de un idioma para la creación de un sitio web para proporcionar una alta seguridad

chehu
fuente