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


48

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

ウェブサイトには.extensionバーがありません。たとえば.php、で開発されていることを示すことができますPHPが、拡張子がなければ、それをどのように知ることができますか?


43
URLによって要求されたファイルの拡張子は、ファイルシステム上のファイルに直接マップする必要がないことに注意してください。.phpCで記述されたCGIスクリプトまたはJavaで記述されたサーブレットのような拡張機能を非常に簡単にマッピングできます。
maple_shaft

1
@Jeroen Community Wikiは、あなたが提案するように使用されることを想定していません。過去にそれが一般的に悪用されていたことは知っていますが、それについては忘れてみましょう
...-ヤンニス

6
厳密に言えば不可能です。ほとんどの言語は、他の言語を完全にエミュレートできます-あなたが探しているかもしれない「語る」サインを含みます。
エモリー

2
私の素朴な観点から、私はこの情報の適用を見ることはできません。この情報をどうしますか?
-tehnyit

5
また、エクスプロイトに対して脆弱なサイトを見つけます。
エリックReppen

回答:


82

インジケータがあります。見つけやすいものもあれば、難しいものもあります。

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

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

これらのインジケータを変更する理由はさまざまです。

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

11
に相当するPHP JSESSIONIDPHPSESSIDです。
ヤニス


1
Djangoサイトでwappalyzerをテストしたところ、検出されたのはJQueryとGoogle Analyticsだけでした。また、社内フレームワークを備えたPHPサイトでは、何も検出されませんでした。
バルテック

私自身の答えを追加するには余りにも徹底的です。また、HTMLパターン(特に、CMSは一貫した名前のクラスを持つ多くのガベージラッパーを追加する傾向があります)と、メタタグで使用されたことを通知する(コメントもありますが)言及された)。
エリックReppen

1
@OP、私は間違いなく自動システムで使用されているものを整理しようとする最初の方法としてセッションCookieをターゲットにします。これは、それほど明白でないフレームワークが一貫して示す可能性が高いことの1つですが、前述のように、100%信頼できるものはありません。
エリックReppen

8

まあ、humans.txtファイルがあります。これは、開発者がサイト開発に関する情報を提供するドメインに置くことができます。彼らがあなたにそれらの種類の情報についてあなたに知って欲しいなら、彼らはそこにそれを置くことができました/すべきです。ただし、他の何かと同様に、これはオプションであるため、ユーザーに通知することを保証できません。humans.textをチェックしてください


4

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

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

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

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

隠しにくいもの:

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

PHPをWebフレームワークと呼んでいますか?これは、Webのこと以上のことを行うのに使用できるチューリング完全言語です(通常はそのようなものとしては使用されませんが)
sakisk

@faif:他の言語では、クエリ文字列はWebフレームワークの一部です。Rasmus Lerdorfでさえ、PHPはWebフレームワークであると考えています。著者よりもよく知っていますか?
バルテック

それは彼が最初に念頭に置いていたものですが、私はPHPが今日はるかにできると思います。正確さのために、PHPをWebフレームワークとは呼びません。その場合、CakePHP、codeigniterなどは何ですか?WebフレームワークのWebフレームワーク?:)
sakisk

1
私はあなたの言い分を理解できません。PHPは、言語自体に組み込まれたWebフレームワークのコア機能を備えた言語です。それに対処する。
バルテック

4

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

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

要約すると、下で何が使用されているかについての非常に良いアイデアを得ることは、ほとんど常に可能であると思います(いくつかの慎重な検査とプロディングで)。使用されるフレームワークを隠すことは可能ですが、大規模なサイトではすぐに実行不可能になります。

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


4

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

ワッパライザー


ハハ、私は自分のブログを訪れ、Apache 2 / PHP 5.5.9と言っていますが、私が作ったので、ASP.NET MVCのブログを自分のものにしたと確信しています。トローリングの理由で、「X-Powered-By:ASP.NET」応答ヘッダーをPHPに変更したためです。
ラース

1

サーバーテクノロジーに関する手がかりがクライアントに見えないような方法でサイトを作成することは可能です。

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

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

他のフレームワークの多くは、ページ本文またはリクエスト/レスポンスに特徴的なスタンプを持っています。それらを見つけてグーグルで答えてください。

ただし、各言語で、HTMLをゼロから作成することを選択した場合(Javaの世界では例として速度テンプレート)、またはサーバーがJSONメッセージのみを返し、クライアントが完全にJavaScriptである純粋なAJAX方法を選択する場合-難しい方法、下の技術を明らかにする未捕捉の例外を引き起こすまで。


0

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



-5

いいえ、Webページのソースコードを表示してWebサイトで使用されている言語を見つけ、言語の存在を検索することはできません。高いセキュリティを提供するウェブサイトの作成に複数の言語を使用しているため

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.