web-dev-qa-db-ja.com

ウェブサイトが使用しているプログラミング言語を知ることは可能ですか?

例えば、 stackexchange.com、サイトの所有者やGoogleにウェブサイトの開発に関する情報を尋ねることなく、バックエンドで使用されている言語を知ることは可能ですか?

どうやら、ウェブサイトには.extensionバー、たとえば.phpPHPで開発されたものを示すことができますが、拡張子がない場合、どうすればそれを知ることができますか?

48
Ted Wong

指標があります。見つけやすいものもあれば、難しいものもあります。

  • ファイル拡張子:.phpは、サイトがPHPで記述されていることを示します.aspは従来のASPを示し、.aspxはASP.NETを示し、.jspはJava JSP、...を示します.
  • cookie名:JSESSIONIDは、Javaサーバーで広く使用されているCookie名です。
  • ヘッダー:一部のシステムはHTTPヘッダーを応答に追加します
  • 特定のHTMLコンテンツ:
    • drupalなどのCMSで使用される一貫したクラス命名スキームを備えた多数のdivラッパーなどのパターン。
    • ツールの使用法を直接的または間接的に示す、HTML内のコメントまたはヘッド内のメタタグ
  • デフォルトのエラーメッセージまたはエラーページのデザイン(例:偽のURLをpingして404を確認する)
  • 時々、手掛かりを提供するバージョン管理目的でコメントタグがページに配置されます
  • ...

しかしそれらすべては削除/変更/偽造することができます。変更が簡単なものもありますが、100%信頼できるものはありません。

これらの指標を変更する理由はいくつかあります。

  • 基盤となるテクノロジーを変更したが、URLを変更したくない
  • テクノロジーに関する情報をできるだけ少なくしたい
  • (以前に関連)プラットフォーム全体の既知の脆弱性が発見/公開された場合、スクリプトキディバスの最初のストップではない
  • あなたは「中に」いるようにしたいです(それは現在、拡張機能のないRESTスタイルのURLを持っていることを意味していますが)。
  • ...
82
Joachim Sauer

さて、開発者がドメインに置くことができるhumans.txtファイルがあり、サイト開発に関する情報を提供します。おそらく誰がそれに取り組んだのか、どの標準やツールが使用されたのかなどです。彼らがあなたにそれらの種類の情報について知ってもらいたいなら、彼らはそこにそれを置くことができます/すべきです。ただし、他の場合と同様に、これはオプションであるため、通知することも保証できません。チェックアウト hum​​ans.text

8
Dandre Allison

つまり、バックエンドで使用している言語を非表示にするのは可能です。簡単な例:「Hello World」ページを考えてみましょう。バックエンドで使用されているフレームワーク/言語を特定することは非常に困難です(セッションCookieなどの基本的な要素が手動で設定されているか、使用されていない場合)。

ただし、フレームワークのポイントは、機能を再実装する手間を省き、標準化された方法で作業できるようにすることです。ほとんどすべてのフレームワークには、特定の小さな告知があります。十分に近くを見ると、フレームワークから解放されます。他の人が指摘したように、構成を使用するか、さまざまな標準機能を再実装することによって、これらを非表示にしようとすることが可能です。それでも、大規模なサイトでは、すべてを完全に隠すことは非常に困難であり、たとえそれを達成したとしても、フレームワークをほとんど使用しないと私は主張します。

要約すると、ほとんどの場合、その下で何が使用されているかについて非常に良いアイデアを得ることができると思います(いくつかの注意深い調査と提案により)。使用されているフレームワークを非表示にすることは可能ですが、大規模なサイトではすぐに実行不可能になります。

以前の回答には、フレームワークと言語が持つさまざまな物語の良い例がいくつかあります。さまざまなビューエンジンには、それらを識別するために使用できる特定の空白関連の動作があることを付け加えておきます。 MVC3 +で使用されているRazorエンジンには、それを特定するために使用できるかなり固有の癖があり、少なくとも、容疑者のリストを絞り込みます(ここでも、回避できますが、それを使用していますか?)。

4
Daniel B

これが具体的にあなたの質問に答えるかどうかはわかりませんが、私にとって本当に役立つツールがあります Wappalyzer 。これは、Webサイトで使用されているテクノロジーを明らかにするFirefox/Chrome拡張機能です。コンテンツ管理システム、Webサーバー、JavaScriptフレームワーク、分析ツールなどを検出します。私はあなたが探しているものを正確に知っているわけではありませんが、それはあなたがサイトが何を使用しているかについて非常に密接な考えを与えます。これは、プログラマーに表示されるものです。

Wappalyzer

4
Ither

いいえ、ウェブマスターが開示したくない場合は、不可能ではないにしてもかなり難しいかもしれません。いくつかのフレームワークにはいくつかの特性がありますが、それらは非表示にすることができます。

  • ファイル拡張子:標準のものを使用する本当の理由はなく、ほとんどの最新のMVCはとにかくURLルーティングを使用します。そのため、サイトがしばらくの間存在しない限り、おそらく何も表示されません(たとえば、stackexchangeは.aspx拡張を使用しません)。

  • セッションID:たとえば、PHPのデフォルトはPHPSESSIDですが、 簡単にオーバーライドできます ;

  • webサーバーとスクリプト言語バージョンのヘッダー: オフ または偽装することもできます。

非表示にするのが難しいもの:

  • PHPは、名前に[]を追加することにより、同じクエリ文字列変数の複数の値を処理します。したがって、...?var[]=1&var[]=3&...のようになります。私の知る限り、それはそのようにそれを処理する唯一のウェブフレームワークです。
4
vartec

サーバーテクノロジに関する手掛かりがクライアントに表示されないように、サイトを作成することは可能です。

ただし、誰かがIceFaces for Javaのようないくつかのフレームワークを使用している場合、リクエストにそのようなものが表示されるため、実際に行うことは不可能です。

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

他のフレームワークの多くは、ページ本体またはリクエスト/レスポンスのいずれかに独自のスタンプを持っています。それらを見つけて、グーグル、あなたは答えを持っているでしょう。

ただし、各言語で、最初からHTMLを作成することを選択した場合(Java世界の例はvelocityテンプレートになります)または純粋なAJAX方法。ここでは、サーバーがJSONメッセージのみを返したり受け入れたりします。クライアントは完全にJavaScriptです。これは、テクノロジーを明らかにするキャッチされていない例外が発生するまでは難しい方法です。

1
Danubian Sailor

本格的なフレームワークまたはCMSを使用しているサイトでは、管理ページにクエリを実行すると、ログインボックスが表示され、どのフレームワークから来たのかを識別できます。これは、ほとんどの人が管理テンプレートのスキンを変更しないためです。たとえば、サイトがexample.comの場合、example.com/admin /またはexample.com/wp-admin/(wordpress)にアクセスしてみてください。

0
Lie Ryan