Можно ли узнать, какой язык программирования использует веб-сайт?

48

Например, stackexchange.comне спрашивая владельца сайта или Google их информацию о разработке сайта, возможно ли узнать, какой язык используется в бэкэнде?

Кажется, у веб-сайта нет .extensionпанели, например, .phpкоторая может указывать, которая разработана PHP, но без расширения, как я могу это узнать?

Тед Вонг
источник
43
Следует отметить, что расширение запрашиваемого файла по URL-адресу не обязательно должно отображаться непосредственно в файл в файловой системе. Можно довольно легко сопоставить расширение как .phpCGI-Script, написанный на C, или Servlet, написанный на Java.
maple_shaft
1
@Jeroen Wiki Community не должен использоваться так, как вы предлагаете . Я знаю, что в прошлом этим обычно злоупотребляли, но давайте попытаемся забыть об этом ...
Яннис
6
Строго говоря, это невозможно. Практически любой язык может полностью эмулировать другой язык, включая любые знаки «рассказать сказку», которые вы, возможно, ищете.
Эмори
2
С моей наивной точки зрения, я не вижу применения этой информации. Что бы вы сделали с этой информацией?
Технит
5
Кроме того, поиск сайтов, уязвимых для эксплойтов.
Эрик Реппен

Ответы:

82

Есть показатели. Одни легче найти, другие сложнее.

  • Расширения файлов: .phpуказывает, что сайт написан на PHP, .aspуказывает на классический ASP, .aspxуказывает на ASP.NET, .jspуказывает на Java JSP, ...
  • имена файлов cookie: JSESSIONIDшироко используемое имя файлов cookie на серверах Java
  • заголовки: некоторые системы добавляют заголовки HTTP к своим ответам
  • конкретный контент HTML:
    • такие шаблоны, как множество div-оболочек с последовательной схемой именования классов, используемой CMS, такими как Drupal.
    • комментарии в HTML или метатеги в голове прямо / косвенно указывают на использование инструмента
  • Сообщения об ошибках по умолчанию или дизайн страницы ошибок (например, пинг поддельного URL, чтобы увидеть их 404)
  • Иногда теги комментариев размещаются на странице в целях контроля версий, которые дают подсказку
  • ...

Но все это можно удалить / изменить / подделать. Некоторые легче изменить, чем другие, но ни один из них не на 100% надежен.

Существуют различные причины для изменения этих показателей:

  • Вы меняете основную технологию, но не хотите менять свои URL
  • Вы хотите дать как можно меньше информации о вашей технологии
  • (связано с предыдущим) Вы бы предпочли не быть первой остановкой шины детективного скрипта, когда обнаружены / опубликованы известные уязвимости всей платформы
  • Вы хотите казаться «внутри» (даже если это в настоящее время означает наличие URL-адресов в стиле REST без расширения).
  • ...
Йоахим Зауэр
источник
11
PHP эквивалентно JSESSIONIDесть PHPSESSID.
Яннис
6
Существует множество инструментов для анализа, например, wappalyzer.com
user123444555621,
1
Только что протестировал wappalyzer на сайте Django - единственное, что он обнаружил - это JQuery и Google Analytics. И PHP-сайт с внутренним фреймворком, где он вообще ничего не обнаружил.
vartec
Слишком тщательно, чтобы добавить мой собственный ответ. Я бы также добавил шаблоны HTML (в частности, CMS, как правило, добавляют много мусорных оберток со последовательно именованными классами) и множество (в основном дрянных) инструментов, которые хотели бы объявить, что они используются в метатегах (также в комментариях, но это было упомянуто).
Эрик Реппен
1
@OP, я бы определенно нацелился на сессионные куки-файлы как на первый способ попытаться разобраться, что используется в автоматизированной системе. Это одна вещь, которую менее очевидные фреймворки могут показывать последовательно, но, как уже говорилось, ничто не является надежным на 100%.
Эрик Реппен
8

Хорошо, есть файл humans.txt, который разработчик может разместить в домене, который дает некоторую информацию о разработке сайта, возможно, кто работал над этим и какие стандарты или инструменты использовались. Если они хотят, чтобы вы знали об этих видах информации, они могут / должны разместить ее там. Однако, как и все остальное, это не является обязательным, поэтому он не может гарантировать вас либо информировать. Проверьте humans.text

Дандре Эллисон
источник
4

Нет, это может быть довольно сложно, если не невозможно, если веб-мастер не хочет раскрывать. Есть несколько характеристик нескольких фреймворков, но они могут быть скрыты.

  • Расширения файлов: нет никакой реальной причины использовать стандартные, и большинство современных MVC так или иначе используют маршрутизацию URL. Так что, если сайт не был в течение некоторого времени, вы, вероятно, не увидите ничего (например, stackexchange не использует .aspxрасширение);

  • идентификаторы сессии: например, PHPSESSIDпо умолчанию для PHP, но может быть легко переопределено ;

  • Заголовки с веб-сервером и версиями языка сценариев: могут быть отключены или даже подделаны.

Материал, который сложнее скрыть:

  • PHP обрабатывает несколько значений для одной переменной строки запроса путем добавления []к имени, таким образом , вы увидите что - то вроде: ...?var[]=1&var[]=3&.... AFAIK, это единственный веб-фреймворк, который обрабатывает это таким образом.
Vartec
источник
Вы называете PHP веб-фреймворком? Это более полный по Тьюрингу язык, который можно использовать не только для веб-контента (хотя обычно он не используется как таковой)
sakisk
@faif: в любом другом языке строка запроса синтаксического анализа является частью веб-фреймворка. Даже Расмус Лердорф считает PHP веб-фреймворком. Вы знаете лучше, чем автор?
vartec
Это то, что он изначально имел в виду, но я думаю, что сегодня PHP может сделать гораздо больше. Для правильности я бы не назвал PHP веб-фреймворком. В таком случае, что такое CakePHP, codeigniter и т. Д.? Веб-фреймворки веб-фреймворка? :)
Сакиск
1
Я не понимаю вашу точку зрения. PHP - это язык, который имеет базовую функциональность веб-фреймворка, встроенного в сам язык. Смирись с этим.
vartec
4

Короче говоря: можно скрыть, какой язык вы используете в бэк-энде. Тривиальный пример: рассмотрим страницу «Hello World»; было бы чрезвычайно сложно выяснить, какой фреймворк / язык использовался на бэкэнде (при условии, что базовые вещи, такие как сеансовые куки-файлы, установлены вручную или не используются).

Однако смысл фреймворков заключается в том, чтобы избавить вас от необходимости повторной реализации функциональности и заставить вас работать стандартизированным образом. Почти у всех платформ есть свои специфические маленькие контрольные сигналы, которые выдают их, если вы посмотрите достаточно близко. Как уже отмечали другие, можно попытаться скрыть их, используя конфигурацию или повторно реализуя различные стандартные функции. Тем не менее, я бы сказал, что для больших сайтов будет крайне сложно полностью спрятать все, и даже если вы достигнете этого, вы будете использовать очень мало своей инфраструктуры.

Подводя итог, я бы сказал, что почти всегда можно получить очень хорошее представление о том, что используется под ним (с некоторым тщательным изучением и подталкиванием). Скрытие используемой основы возможно, но быстро становится невозможным для больших площадок.

В предыдущих ответах есть несколько хороших примеров различных контрольных сигналов, которые есть у фреймворков и языков. Я хотел бы добавить, что различные механизмы представления имеют специфическое поведение, связанное с пробелами, которое может использоваться для их идентификации. Движок Razor, используемый в MVC3 +, имеет некоторые довольно специфические причуды, которые могут быть использованы для его идентификации или, по крайней мере, для сужения списка подозреваемых (опять же, вы можете обойти его, но потом, используете ли вы его?).

Даниэль Б
источник
4

Я не знаю, отвечает ли это конкретно на ваш вопрос, но есть инструмент, который мне действительно помог: Wappalyzer . Это расширение Firefox / Chrome, которое раскрывает технологии, используемые на веб-сайтах. Он обнаруживает системы управления контентом, веб-серверы, JavaScript-фреймворки, аналитические инструменты и многие другие. Я знаю, что это не совсем то, что вы ищете, но это дает вам очень точное представление о том, что сайт использует. Это то, что он показывает для programmers.stackexchange.com

Wappalyzer

Ither
источник
Ха-ха, я посетил мой блог и там написано, что 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

Многие другие фреймворки имеют свои характерные штампы либо в теле страницы, либо в запросах / ответах. Найдите их, Google, и у вас будет ответ.

Тем не менее, на каждом языке, если вы решите создать HTML с нуля (в мире Java примером могут быть шаблоны скорости ) или выбрать чистый AJAX-способ, где сервер возвращает / принимает только сообщения JSON, а клиент полностью на JavaScript - трудный путь До тех пор, пока вы не вызовете незамеченное исключение, раскрывающее технологию под.

Дунайский моряк
источник
0

На сайтах, которые используют полнофункциональный фреймворк или CMS, иногда вы можете попробовать запросить страницу администратора, вам будет предложено окно входа в систему и определите, с какого фреймворка это произошло, потому что большинство людей не повторяют шаблон администратора. Например, если ваш сайт - example.com, попробуйте перейти на example.com/admin/ или example.com/wp-admin/ (wordpress).

Ли Райан
источник
-5

Нет, невозможно найти язык, используемый на веб-сайтах, просмотрев исходный код веб-страницы и выполнив поиск по наличию языков. из-за использования более одного языка для создания сайта, чтобы обеспечить высокую безопасность

chehu
источник