Bir web sitesinin hangi programlama dilini kullandığını bilmek mümkün mü?


48

Örneğin stackexchange.com, site sahibine veya Google’a web sitesini geliştirme hakkındaki bilgilerini sormadan, arka tarafta hangi dilin kullanıldığını bilmek mümkün müdür?

Görünüşe göre, web sitesinde bir .extensionbar yok, örneğin .phphangi ülkede geliştirildiğini gösterebilir PHP, ancak uzantı olmadan bunu nasıl bilebilirim?


43
Talep edilen bir dosyanın URL ile genişletilmesinin doğrudan dosya sistemindeki bir dosyayla eşleşmesi gerekmediğine dikkat edilmelidir. Bir kimse .phpC ile yazılmış bir CGI-Script veya Java ile yazılmış bir Servlet gibi bir uzantıyı kolayca haritalayabilir .
maple_shaft

1
@Jeroen Topluluğu Wiki'nin önerdiğin gibi kullanılmaması gerekiyor . Biliyorum, geçmişte olduğu gibi kötüye kullanılmıştı, ama bunu unutmaya çalışalım ...
yannis

6
Kesinlikle konuşmak imkansız. Herhangi bir dil, başka bir dili tamamen taklit edebilir - aradığınız "hikaye anlat" işaretleri dahil.
emory

2
Saf bakış açımdan bu bilginin bir uygulamasını göremiyorum. Bu bilgiyle ne yapardın?
tehnyit

5
Ayrıca, istismarlara karşı savunmasız siteler bulmak.
Erik,

Yanıtlar:


82

Göstergeler var. Bazıları bulmak daha kolay, bazıları daha zordur.

  • dosya uzantıları: .phpsitenin PHP ile yazılmış .aspolduğunu belirtir, klasik ASP'yi .aspxbelirtir, ASP.NET'i .jspbelirtir, Java JSP'leri belirtir ...
  • çerez adları: JSESSIONIDJava sunucularında yaygın olarak kullanılan bir çerez adıdır
  • başlıklar: bazı sistemler yanıtlarına HTTP başlıkları ekler
  • belirli HTML içeriği:
    • Drupal gibi CMS'lerin kullandığı gibi tutarlı bir sınıf adlandırma düzenine sahip çok sayıda div-sarmalayıcı gibi desenler.
    • Başlıktaki HTML veya meta etiketlerindeki yorumlar doğrudan / dolaylı olarak araç kullanımını gösterir
  • Varsayılan hata mesajları veya hata sayfası tasarımı (ör. 404'lerini görmek için sahte bir URL'ye ping atma)
  • Bazen yorum etiketleri, bir ipucu sağlayan sürüm oluşturma amaçları için sayfaya yerleştirilir
  • ...

Ancak bunların tümü kaldırılabilir / değiştirilebilir / sahte olabilir. Bazıları diğerlerinden daha kolaydır, ancak hiçbiri% 100 güvenilir değildir.

Bu göstergeleri değiştirmek için çeşitli nedenler var:

  • Temel teknolojiyi değiştiriyorsunuz ancak URL’lerinizi değiştirmek istemiyorsunuz
  • Teknolojiniz hakkında mümkün olduğunca az bilgi vermek istiyorsunuz.
  • (önceki ile ilgili) Platform genelinde bilinen güvenlik açıkları tespit edildiğinde / duyurulduğunda kiddie bus komut dosyası için ilk durak olmayı tercih etmediniz.
  • "İçinde" gibi görünmek istiyorsunuz (bu, şu anda uzantı içermeyen REST tarzı URL'ler anlamına gelmesine rağmen).
  • ...

11
PHP eşdeğer JSESSIONIDolduğunu PHPSESSID.
yannis

6
Analiz yapan çok sayıda araç var, örneğin wappalyzer.com
user123444555621 11

1
Django sitesinde yeni test edilmiş wappalyzer - tespit ettiği tek şey JQuery ve Google Analytics'tir. Ve kendi bünyesinde, hiçbir şey tespit etmediği PHP sitesi.
vartec

Kendi cevabımı eklemek için çok kapsamlı. Ayrıca, HTML kalıpları (özellikle CMS'ler, sürekli olarak adlandırılmış sınıflara sahip çok sayıda çöp paketleyici ekleme eğilimine sahiptir) ve meta etiketlerde kullanıldığını duyurmaktan hoşlanan birçok (çoğunlukla berbat) araç eklerdim. bahsedildi).
Erik,

1
@OP, otomatik olarak bir sistemde ne kullanıldığını denemenin ve sıralamanın ilk yolu olarak kesinlikle oturum çerezlerini hedeflerdim. Bu, daha az belirgin olan çerçevelerin tutarlı bir şekilde göstermesi muhtemel olan bir şeydir ancak söylendiği gibi, hiçbir şey% 100 güvenilir değildir.
Erik,

8

Peki, bir geliştiricinin site geliştirme hakkında biraz bilgi veren, belki de üzerinde çalışan ve hangi standart veya araçların kullanıldığı hakkında bilgi veren etki alanına koyabileceği humans.txt dosyası var. Bu tür bilgileri bilmenizi isterlerse, oraya koyabilirler / koymalıdırlar. Ancak, başka bir şey gibi bu da isteğe bağlıdır, bu yüzden sizi bilgilendirmeyi garanti edemez. Check out humans.text


4

Hayır, web yöneticisi ifşa etmek istemiyorsa imkansız olmasa zor olabilir. Birkaç çerçevenin bazı özellikleri vardır, ancak bunlar gizlenebilir.

  • dosya uzantıları: standart olanları kullanmak için gerçek bir neden yoktur ve çoğu modern MVC'ler yine de URL yönlendirme kullanır. Bu nedenle, site bir süredir etrafta bulunmadığı sürece, muhtemelen hiç bir şey görmeyeceksiniz (örn. Stackexchange .aspxuzantı kullanmaz );

  • oturum kimlikleri: örneğin PHPSESSIDPHP için varsayılandır, ancak kolayca geçersiz kılınabilir ;

  • web sunucusu ve kodlama dili sürümleri içeren başlıklar: kapatılabilir ve hatta sahte olabilir.

Saklanması zor olan şeyler:

  • PHP ekleyerek aynı sorgu dize değişkeni için birden fazla değer kolları []böylece gibi bir şey görmek istiyorum, isme: ...?var[]=1&var[]=3&.... AFAIK, onu bu şekilde ele alan tek web çerçevesidir.

PHP'ye web çerçevesi mi diyorsunuz? Daha çok web şeylerinden daha fazlasını yaparken kullanılabilecek bir Turing-tamamlanmış bir dil (genellikle böyle kullanılmamasına rağmen)
sakisk

@ Faif: Başka bir dilde sorgu dizgisini ayrıştırma web çerçevesinin bir parçasıdır. Rasmus Lerdorf bile PHP'yi bir web çerçevesi olarak görüyor. Yazardan daha iyi biliyor musun?
vartec

Başlangıçta aklında olan buydu, ama PHP'nin bugün çok daha fazlasını yapabileceğini düşünüyorum. Doğruluk için PHP'yi bir web çerçevesi olarak adlandırmazdım. Bu durumda CakePHP, codeigniter vb. Nedir? Web çerçevesinin web çerçeveleri? :)
sakisk

1
Amacını anlamadım. PHP, dilin içine gömülü bir web çerçevesinin temel işlevselliğine sahip bir dildir. Başa çıkmak.
vartec

4

Kısacası: Arka tarafta hangi dili kullandığınızı gizlemek mümkündür . Önemsiz örnek: "Merhaba Dünya" sayfasını düşünün; arka uçta hangi çerçevenin / dilin kullanıldığını anlamak çok zor olurdu (oturum çerezleri gibi temel öğelerin manuel olarak ayarlanıp kullanılmadığı varsayılarak).

Ancak, çerçevelerin amacı, işlevselliği yeniden uygulamanıza gerek kalmadan kurtarmak ve standart bir şekilde çalışmanızı sağlamaktır. Neredeyse tüm çerçeveler, yeterince yakından bakarsanız, onları size verecek olan belirli küçük anlatım tablolarına sahiptir. Diğerlerinin de belirttiği gibi, çeşitli standart özellikleri yapılandırarak veya yeniden uygulayarak bunları gizlemeye çalışmak mümkündür. Bununla birlikte, büyük siteler için, her şeyi tamamen gizlemenin son derece zor olacağını ve bunu başarsanız bile çerçevenizi çok az kullanacağınızı iddia ediyorum.

Özet olarak, altında ne kullanıldığı hakkında çok iyi bir fikir edinmenin neredeyse her zaman mümkün olduğunu söyleyebilirim (dikkatli bir inceleme ve prodding ile). Kullanılan çerçevenin gizlenmesi mümkündür, ancak büyük siteler için hızla olanaksız hale gelir.

Önceki cevaplar, çerçevelerin ve dillerin sahip olduğu çeşitli anlatım örneklerinden bazı iyi örneklere sahiptir. Çeşitli görüntüleme motorlarının, onları tanımlamak için kullanılabilecek boşlukla ilgili özel bir davranışa sahip olduğunu eklemek isterim. MVC3 + 'da kullanılan Jilet motoru, onu tanımlamak için kullanılabilecek ya da en azından şüphelilerin listesini daraltmak için kullanılabilecek bazı özel tuhaflıklar içeriyor (yine, bunu adım adım atabilirsiniz, ancak sonra kullanıyorsunuz?).


4

Bunun özel olarak sorunuza cevap verip vermediğini bilmiyorum ama bana gerçekten yardımcı olacak bir araç var: Wappalyzer . Web sitelerinde kullanılan teknolojileri ortaya çıkaran bir Firefox / Chrome uzantısıdır. İçerik yönetim sistemlerini, web sunucularını, JavaScript çerçevelerini, analiz araçlarını ve diğerlerini algılar. Tam olarak aradığınızı değil, bir sitenin ne kullandığı hakkında size çok yakın bir fikir verdiğimi biliyorum. Programmers.stackexchange.com için gösterdiği şey budur

Wappalyzer


Ha ha, blogumu ziyaret ettim ve Apache 2 / PHP 5.5.9 yazıyor, ancak kendi ASP.NET MVC blogunuzu yazdığından eminim, çünkü yaptım. Çünkü trolling nedeniyle 'X-Powered-By: ASP.NET' cevap başlığını PHP olarak değiştirdim.
Lars,

1

Bu şekilde bir site yazmak mümkündür, sunucu teknolojisi ile ilgili hiçbir ipucu müşteriye görünmez.

Bununla birlikte, birisi IceFaces for Java gibi bazı çerçeveler kullandığında, yapmak istemeniz mümkün değildir, çünkü isteklerinizde böyle bir şey göreceksiniz:

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

Diğer çerçevelerin çoğunda, sayfa gövdesi veya istek / cevaplarda karakteristik pulları vardır. Onları bulun, google ve bir cevabınız olsun.

Ancak, her dilde, sıfırdan HTML oluşturmayı seçerseniz (Java dünyasında bir örnek hız şablonları olur) veya sunucunun yalnızca JSON iletilerini kabul ettiği / kabul ettiği ve istemcinin tamamen JavaScript kullandığı - saf bir AJAX yolu seçerseniz , altında teknolojiyi ortaya çıkaran yakalanmamış istisnalara neden olana kadar.


0

Tam kapsamlı bir çerçeve veya CMS kullanan sitelerde, bazen yönetici sayfasını sorgulamayı deneyebilirsiniz, bir giriş kutusu sunulur ve çoğu kişi yönetici şablonunu yeniden kullanmadığından, hangi çerçeveden geldiğini belirler. Örneğin, siteniz example.com ise, example.com/admin/ veya example.com/wp-admin/ (wordpress) adresine gitmeyi deneyin.



-5

Hayır, web sayfasında kullanılan dili bulmak, web sayfasının kaynak kodunu görüntülemek ve dillerin varlığını aramak mümkün değildir. yüksek güvenlik sağlamak için web sitesi oluşturmak için birden fazla dil kullanılması nedeniyle

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.