Чи можна знати, якою мовою програмування використовується веб-сайт?


48

Наприклад, stackexchange.comне вимагаючи від власника веб-сайту чи Google їхньої інформації про розробку веб-сайту, чи можливо це знати, якою мовою використовується задня частина?

Здається, на веб-сайті немає .extensionрядка, наприклад, на .phpякому можна вказати, що розробляється PHP, але без розширення, як я можу це знати?


43
Слід зазначити, що розширення запитуваного файлу за URL-адресою не потрібно безпосередньо відображати у файлі файлової системи. Можна досить легко відобразити розширення на зразок .phpCGI-скрипту, написаного на C, або сервлета, написаного на Java.
maple_shaft

1
@Jeroen Community Wiki не передбачається використовувати для запропонованих вами пропозицій . Я знаю, що це зазвичай зловживало як таке в минулому, але давайте спробуємо забути про це ...
yannis

6
Строго кажучи, це неможливо. Більшість будь-якої мови може повністю імітувати іншу мову - включаючи будь-які знаки "розповідати казку", які ви можете шукати.
emory

2
З моєї наївної точки зору, я не бачу застосування цієї інформації. Що б ви зробили з цією інформацією?
tehnyit

5
Крім того, пошук сайтів, уразливих для експлуатації.
Ерік Реппен

Відповіді:


82

Є показники. Одніх легше знайти, інших - важче.

  • розширення файлу: .phpвказує на те, що сайт написаний на PHP, .aspвказує на класичний ASP, .aspxвказує ASP.NET, .jspвказує JSP на Java, ...
  • імена файлів 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, я б напевно націлив файли cookie сесії як перший спосіб спробувати розібратися, що використовується в автоматизованій системі. Це одне, що менш очевидні рамки, ймовірно, постійно демонструються, але, як було сказано, нічого не є 100% надійним.
Ерік Реппен

8

Ну, є файл human.txt, який розробник може встановити на домен, який дає деяку інформацію про розробку сайту, можливо, хто над ним працював та які стандарти та інструменти використовувалися. Якщо вони хочуть, щоб ви знали про такі види інформації, вони могли / повинні розмістити її там. Однак, як і будь-що інше, це необов’язково, тому воно не може гарантувати вас також. Перевірте люди.текст


4

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

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

  • ідентифікатори сеансу: наприклад PHPSESSID, PHP за замовчуванням, але їх можна легко змінити ;

  • заголовки з версією веб-сервера та мовою сценаріїв: можна вимкнути або навіть підробити.

Речі, які важче приховати:

  • PHP обробляє кілька значень для однієї змінної рядка запиту шляхом додавання []до імені, таким чином , ви побачите що - щось на кшталт: ...?var[]=1&var[]=3&.... AFAIK, це єдиний веб-фреймворк, який так обробляє його.

Ви називаєте PHP веб-рамкою? Це більше мова про повну мову Тьюрінга, яку можна використовувати більше, ніж веб-речі (хоча зазвичай вони не використовуються як такі)
sakisk

@faif: будь-який інший рядок запиту для розбору мови є частиною веб-рамки. Навіть Расмус Лердорф вважає PHP веб-рамкою. Ви краще знаєте, ніж автор?
vartec

Це те, що він мав на увазі спочатку, але я думаю, що PHP може зробити сьогодні набагато більше. Для коректності я б не назвав PHP веб-рамкою. У такому випадку, що таке CakePHP, кодигітайтер тощо? Веб-рамки веб-рамки? :)
sakisk

1
Я не розумію вашої точки зору. PHP - це мова, яка має основні функціональні можливості веб-рамок, вбудованих у саму мову. Змирися з цим.
vartec

4

Коротше кажучи: можна сховати, якою мовою ви користуєтеся в бек-енді. Тривіальний приклад: розгляньте сторінку "Hello World"; було б вкрай важко розібратися, який фреймворк / мова використовується на задньому плані (якщо припустити, що основні речі, такі як файли cookie сеансу, встановлюються вручну чи не використовуються).

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

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

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


4

Я не знаю, чи це конкретно відповідає на ваше запитання, але є інструмент, який мені дуже допомагав: Wappalyzer . Це розширення Firefox / Chrome, яке розкриває технології, які використовуються на веб-сайтах. Він виявляє системи управління вмістом, веб-сервери, рамки JavaScript, інструменти аналітики та багато інших. Я знаю, що це не саме те, що ви шукаєте, але це дає вам дуже близьке уявлення про те, що сайт використовує. Це те, що він показує для programmers.stackexchange.com

Wappalyzer


Ха-ха, я відвідав свій блог, на якому написано 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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.