Czy można wiedzieć, jakiego języka programowania używa strona internetowa?

48

Na przykład, stackexchange.combez pytania właściciela witryny lub Google o informacje na temat tworzenia witryny, czy można wiedzieć, jakiego języka używa się w zapleczu?

Wygląda na to, że strona internetowa nie ma .extensionpaska, na przykład, .phpktóry może wskazywać, który jest opracowany PHP, ale bez rozszerzenia, skąd mam to wiedzieć?

Ted Wong
źródło
43
Należy zauważyć, że rozszerzenie żądanego pliku o adres URL nie musi być mapowane bezpośrednio na plik w systemie plików. Można dość łatwo zmapować rozszerzenie takie jak .phpskrypt CGI napisany w C lub serwlet napisany w Javie.
wałek klonowy
1
Wiki @Jeroen Community Wiki nie powinno być używane zgodnie z twoją propozycją . Wiem, że w przeszłości był tak często nadużywany, ale spróbujmy o tym zapomnieć ...
yannis
6
Ściśle mówiąc, jest to niemożliwe. Większość dowolnego języka może całkowicie naśladować inny język - w tym wszelkie znaki „opowiadania”, których możesz szukać.
emory
2
Z mojej naiwnej perspektywy nie widzę zastosowania tych informacji. Co zrobiłbyś z tymi informacjami?
tehnyit
5
Ponadto znajdowanie witryn podatnych na exploity.
Erik Reppen

Odpowiedzi:

82

Istnieją wskaźniki. Niektóre są łatwiejsze do znalezienia, inne trudniejsze.

  • rozszerzenia plików: .phpwskazuje, że strona jest napisana w PHP, .aspwskazuje klasyczną ASP, .aspxwskazuje ASP.NET, .jspwskazuje JSP Java, ...
  • Nazwy plików cookie: JSESSIONIDjest powszechnie używaną nazwą pliku cookie na serwerach Java
  • nagłówki: niektóre systemy dodają nagłówki HTTP do swoich odpowiedzi
  • konkretna treść HTML:
    • wzorce, takie jak wiele owijaczy div ze spójnym schematem nazewnictwa klas stosowanym przez CMS-y, takie jak Drupal.
    • komentarze w HTML lub metatagach w nagłówku bezpośrednio / pośrednio wskazujące użycie narzędzia
  • Domyślne komunikaty o błędach lub projekt strony błędu (np. Pingowanie fałszywego adresu URL w celu wyświetlenia ich 404)
  • Czasami tagi komentarzy są umieszczane na stronie w celu wersjonowania, które dostarczają wskazówek
  • ...

Ale wszystkie z nich można usunąć / zmienić / sfałszować. Niektóre są łatwiejsze do zmiany niż inne, ale żadne nie jest w 100% niezawodne.

Istnieją różne powody, aby zmienić te wskaźniki:

  • Zmieniasz technologię, ale nie chcesz zmieniać adresów URL
  • Chcesz podać jak najmniej informacji o swojej technologii
  • .
  • Chcesz wydawać się „w” (nawet „obecnie” oznacza to, że masz adresy URL w stylu REST bez rozszerzeń).
  • ...
Joachim Sauer
źródło
11
Odpowiednikiem PHP JSESSIONIDjest PHPSESSID.
yannis
6
Istnieje wiele narzędzi wykonujących analizy, na przykład wappalyzer.com
user123444555621
1
Właśnie przetestowałem wappalyzer na stronie Django - jedyne, co wykrył, to JQuery i Google Analytics. I strona PHP z wewnętrznym frameworkiem, w której nic nie wykryła.
vartec
Zbyt dokładny, aby dodać własną odpowiedź. Dodałbym również wzorce HTML (w szczególności CMS-y mają tendencję do dodawania wielu owijaczy do śmieci z konsekwentnie nazwanymi klasami) i wielu (głównie kiepskich) narzędzi, które ogłaszają, że zostały użyte w metatagach (także komentarze, ale to wspomniano).
Erik Reppen
1
@OP, zdecydowanie wybrałbym sesyjne pliki cookie jako pierwszy sposób, aby spróbować ustalić, co jest używane w zautomatyzowanym systemie. Jest to jedna rzecz, którą mniej oczywiste frameworki prawdopodobnie będą konsekwentnie pokazywać, ale jak powiedziano, nic nie jest w 100% niezawodne.
Erik Reppen
8

Cóż, istnieje plik people.txt, który programista może umieścić w domenie, który zawiera informacje o rozwoju witryny, być może kto nad nią pracował i jakie standardy lub narzędzia zostały zastosowane. Jeśli chcą, abyś wiedział o tego rodzaju informacjach, powinien / powinien je tam umieścić. Jednak, podobnie jak wszystko inne, jest to opcjonalne, więc nie może zagwarantować, że cię poinformuje. Sprawdź people.text

Dandre Allison
źródło
4

Nie, może to być trudne, jeśli nie niemożliwe, jeśli webmaster nie chce tego ujawnić. Istnieje kilka cech kilku frameworków, ale można je ukryć.

  • rozszerzenia plików: nie ma prawdziwego powodu, aby używać standardowych, a większość współczesnych MVC i tak używa routingu adresów URL. Więc jeśli strona nie będzie już dostępna przez jakiś czas, prawdopodobnie jej nie zobaczysz (np. Stackexchange nie używa .aspxrozszerzenia);

  • identyfikatory sesji: na przykład PHPSESSIDjest domyślny dla PHP, ale można go łatwo zastąpić ;

  • nagłówki z serwerem WWW i wersjami językowymi skryptów: można je wyłączyć, a nawet sfałszować.

Rzeczy trudniejsze do ukrycia:

  • PHP obsługuje wiele wartości dla samej zmiennej ciąg kwerendy przez dodanie []do nazwy, co chcesz zobaczyć coś takiego: ...?var[]=1&var[]=3&.... AFAIK, to jedyna platforma internetowa, która obsługuje to w ten sposób.
vartec
źródło
Nazywasz PHP frameworkiem internetowym? Jest to bardziej kompletny język Turinga, którego można używać do robienia czegoś więcej niż stron internetowych (chociaż zwykle nie jest on używany jako taki)
sakisk
@faif: w dowolnym innym języku ciąg zapytania analizujący jest częścią frameworka sieciowego. Nawet Rasmus Lerdorf uważa PHP za platformę internetową. Znasz lepiej niż autor?
vartec
To właśnie miał na myśli, ale myślę, że PHP może dziś zrobić znacznie więcej. Dla poprawności nie nazwałbym PHP strukturą internetową. W takim razie czym jest CakePHP, programista itp.? Frameworki frameworka? :)
sakisk
1
Nie rozumiem o co ci chodzi. PHP jest językiem, który ma podstawową funkcjonalność frameworka internetowego osadzonego w samym języku. Sobie z tym poradzić.
vartec
4

W skrócie: Jest to możliwe , aby ukryć to, co język, którego używasz na back-end. Trywialny przykład: rozważ stronę „Hello World”; byłoby bardzo trudno dowiedzieć się, jaki framework / język był używany na zapleczu (zakładając, że podstawowe rzeczy, takie jak sesyjne pliki cookie są ustawiane ręcznie lub nie są używane).

Jednak celem ram jest zaoszczędzenie konieczności ponownej implementacji funkcjonalności i sprawienie, abyś pracował w znormalizowany sposób. Prawie wszystkie ramy mają swoje specyficzne małe opowieści, które je rozdadzą, jeśli spojrzysz wystarczająco blisko. Jak zauważyli inni, można spróbować je ukryć, używając konfiguracji lub ponownie wdrażając różne standardowe funkcje. Niemniej jednak twierdzę, że w przypadku dużych witryn bardzo trudno byłoby całkowicie ukryć wszystko, a nawet jeśli to osiągniesz, nie wykorzystasz bardzo dużo swojego frameworka.

Podsumowując, powiedziałbym, że prawie zawsze można uzyskać bardzo dobre wyobrażenie o tym, co jest używane pod spodem (po dokładnym zbadaniu i popchnięciu). Ukrywanie używanego frameworka jest możliwe, ale szybko staje się niewykonalne dla dużych witryn.

Poprzednie odpowiedzi zawierają kilka dobrych przykładów różnych narracji dostępnych w ramach i językach. Chciałbym dodać, że różne silniki widoków mają specyficzne zachowanie związane z białymi znakami, które można wykorzystać do ich identyfikacji. Silnik Razor zastosowany w MVC3 + ma pewne dość specyficzne dziwactwa, które można by wykorzystać do jego identyfikacji, a przynajmniej zawęzić listę podejrzanych (ponownie, możesz to zrobić krok po kroku, ale czy używasz tego?).

Daniel B.
źródło
4

Nie wiem, czy to konkretnie odpowiada na twoje pytanie, ale istnieje narzędzie, które było mi bardzo pomocne: Wappalyzer . Jest to rozszerzenie do przeglądarki Firefox / Chrome, które odkrywa technologie stosowane na stronach internetowych. Wykrywa systemy zarządzania treścią, serwery WWW, frameworki JavaScript, narzędzia analityczne i wiele innych. Wiem, że nie jest to dokładnie to, czego szukasz, ale daje bardzo bliskie pojęcie o tym, z czego korzysta strona. To pokazuje programmers.stackexchange.com

Wappalyzer

Ither
źródło
Ha ha, odwiedziłem mojego bloga i napisano Apache 2 / PHP 5.5.9, ale jestem prawie pewien, że jest to własny blog ASP.NET MVC, ponieważ go stworzyłem. Ponieważ z powodów trollowania zmieniłem nagłówek odpowiedzi „X-Powered-By: ASP.NET” na PHP.
Lars
1

Możliwe jest napisanie strony w taki sposób, aby klient nie widział żadnych wskazówek na temat technologii serwera.

Jednak gdy ktoś używa niektórych frameworków, takich jak IceFaces for Java , jest to praktycznie niemożliwe, ponieważ zobaczysz coś takiego w swoich żądaniach:

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

Wiele innych ram ma swoje charakterystyczne znaczki w treści strony lub w żądaniach / odpowiedziach. Znajdź je, google, a będziesz miał odpowiedź.

Jednak w każdym języku, jeśli zdecydujesz się utworzyć HTML od zera (w świecie Java przykładem mogą być szablony prędkości ) lub wybierzesz czysty sposób AJAX, w którym serwer zwraca / akceptuje tylko wiadomości JSON, a klient jest w całości w JavaScript - trudny sposób , dopóki nie spowodujesz nieprzechwyconego wyjątku, który ujawnia technologię.

Żeglarz dunajski
źródło
0

W witrynach, które używają pełnowymiarowego frameworka lub CMS, czasami możesz spróbować wysłać zapytanie do strony administratora, zobaczysz okno logowania i określisz, z jakiej platformy pochodzi, ponieważ większość osób nie zmienia szablonu administratora. Na przykład, jeśli Twoja witryna to example.com, spróbuj przejść do example.com/admin/ lub example.com/wp-admin/ (wordpress).

Lie Ryan
źródło
-5

Nie, nie można znaleźć języka używanego na stronach internetowych, przeglądając kod źródłowy strony i sprawdzając istnienie języków. z powodu użycia więcej niż jednego języka do tworzenia strony internetowej w celu zapewnienia wysokiego bezpieczeństwa

Chehu
źródło