OPTIONS、TRACEなど、WebサーバーでサポートされているさまざまなHTTPメソッドを識別するにはどうすればよいですか?
Linuxで nc コマンドを試しました。しかし、それは機能しません。サポートされているHTTPメソッドは表示されません。要求されたHTMLページとともに、他のいくつかのHTTPヘッダーが返されます。別の解決策はありますか?
RFC2616 ごとに、OPTIONSメソッドshouldはサポートされているメソッドを返します。これは常にそうであるとは限らないので、キーワードはshouldです。以前の投稿ですでに指摘されているように、確実にするために、各メソッドを個別にテストする必要があります。
メソッドはほとんどないため(OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、およびCONNECT)、スクリプトとncを使用して、許可されているすべてのメソッドにリクエストを送信し、結果を解析できます。
for method in OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT ; do
echo -e "\n\nTrying $method\n\n"
echo -e "$method / HTTP/1.1\nHost: server-hostname\nConnection: close\n\n" | nc server-hostname 80 | head
sleep 2
done
HTTPエラー400、403、405、406は、実装されていないメソッドを使用しようとしたときに返されるタイプです。
Webサーバーがサポートするメソッドを識別する唯一の方法は、それぞれを試し、応答を評価して、メソッドがサポートされているかどうかを判断することです。サポートするメソッドを問い合わせるためだけにクエリを実行することはできません。リストは表示されません。
とはいえ、ncよりも優れたツールがあります。 Nmapとmetasploit はどちらもHTTPメソッドスキャンをサポートし、基本的に作業を自動化します。
HTTPサーバーが Allow
応答ヘッダー で特定のリソースに対してサポートされているメソッドのリストを返す場合があります RFC 7231 (newRFC for HTTP 1.1セマンティクス):
OPTIONS
要求 への応答で、特定のリソースパスまたは特別な*
パス(主にサーバーの機能を記述します)のいずれか。Allow
応答ヘッダー ;で許可されたメソッドのリストを提供する必要があります。Allow
応答ヘッダー ;でサポートされているメソッドのリストを返すことができます。しかし、サーバーが連携しない場合はどうなりますか?例えば。 OPTIONS *
リクエスト、さまざまなGET
リクエストを試しましたが、サーバーがAllow
ヘッダーで許可されたメソッドのリストを返すことはありませんか?または、サーバーが応答したが、サーバーが嘘をついていると思われる場合はどうなりますか?
それからあなたは知らない、そしてあなたはそれと一緒に暮らさなければならないでしょう。何をするかは、目標によって異なります。
GET
のみがサポートされていると想定して慎重に行う必要があります。および使用方法に関する詳細なドキュメントを入手してください。システム;PATCH
など)をテストしたり、独自の動詞を作成したりできます。より一般的には、テストの一部がシステムにゴミを投げて、それがどのように反応するかを確認します。ただし、サポートされている動詞のリストを知りたい理由について考えてください。追加のデータがないと、どの動詞が使用されているかを知ることはほとんど役に立ちません(たとえば、https://accounts.google.com/AddSession
はPOST
動詞を受け入れます-どのようなデータがどの形式であるかなどわからない場合、動詞を知っているだけで何ができるのでしょうか?)