私はWebベースのアプリケーションを作成していますが、Webサイトに必要のないHTTPメソッド(具体的には、OPTIONS
、HEAD
およびTRACE
)を無効にしています。
これをhttpd.conf
of my xamppこれが機能するかどうかをテストするには:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|POST|PUT)
RewriteRule .* - [R=405,L]
それらが本当に非アクティブ化されているかどうかはどうすればわかりますか?この設定が正しく機能していることをどのようにテストできますか?サーバーサイドの管理は初めてです。
@オーエンはそれを釘付けにしましたが、それを自分で行う例を示すためだけです:
$ telnet localhost 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
TRACE / HTTP/1.0
HTTP/1.1 405 Method Not Allowed
Date: Tue, 19 Nov 2013 12:11:40 GMT
Server: Apache/2.2.22 (Linux/SUSE)
Vary: accept-language,accept-charset
Accept-Ranges: bytes
Connection: close
Content-Type: text/html; charset=iso-8859-1
Content-Language: en
Expires: Tue, 19 Nov 2013 12:11:40 GMT
TRACE/HTTP/1.0と入力すると、2つの改行が続きます。応答の最初の行(405 Method Not Allowed)は、WebサーバーがTRACEを受け入れないことを示しています。
まだHTTPを知らない場合、さまざまなメソッドのリクエストを作成する方法を知るのは難しい場合があります。 OWASPプロジェクトには、 Test HTTP Methods の使用例がいくつかあり、これが役立ちます。
netcat
やtelnet
などのツールを使用して、コマンドラインからこれを行うことができます。
コマンドラインや、慣れていない新しいコマンドを避けたい場合は、 [〜#〜] postman [〜#〜] のようなツールを使用すると、ブラウザーでカスタムHTTPコマンドを作成できます、結果を表示します。
また、コマンドはほとんどhttpd.confのコマンドで無効にできるため、これが望ましい場合があることにも注意してください。例えば TraceEnable Off
はTRACEコマンドを無効にします。
これは OWASP Testing Guide(v4) の step で、 original netcat を使用してこれを詳細に行う方法を示しています。
$ nc www.victim.com 80
OPTIONS / HTTP/1.1
Host: www.victim.com
HTTP/1.1 200 OK
[...]
Allow: GET,HEAD,POST,OPTIONS,TRACE
これはOPTIONS
をサポートするサーバーに依存し、サポートされているリストを報告します—これは、常にそうであるとは限りません(これから調べようとします)が、未強化のApacheで正常に動作するはずです。 OPTIONS
メソッドのみを削除することで、Webサーバーを誤って「強化」する可能性があり、ほとんどのスキャナーは問題に気づきません。
GNU netcat
(古くてメンテナンスされていない)を使用することもできますが、nmapの ncat
= SSL/TLSをサポートします:ncat --ssl www.victim.com 443
。
nmap
http-methodsスクリプトを使用することもできますが、これは本当に事前にテストする場合にのみ役立ちます(続行を拒否するため) OPTIONS
がメソッドのリストを提供しない場合):
nmap -vvv --script=http-methods.nse \
--script-args http-methods.retest=1 -p 80,443 www.victim.com
Apache httpd(XAMPPに含まれている)を使用しているため、mod_rewrite
の代わりに、コア LimitExcept
ディレクティブを使用して、リクエストメソッドの同様のフィルタリングを提供することもできます。 TRACE
を無効にすると、HTTPサーバーが仕様に準拠しなくなる可能性があることに注意してください(「405メソッドが許可されていません」または「501未実装」のいずれかを返す場合は問題ありません)。 GET
とHEAD
は、「汎用」サーバー用の唯一の 2つの必須の要求メソッド です。
Lwpを備えたPerlがあり、GET
コマンドがインストールされている場合は、OPTIONS
にまったく依存せずに、これらを自分で列挙できます。
for mm in GET HEAD PUT POST DELETE OPTIONS PATCH TRACK TRACE PATCH; do
printf "\n\n$mm\n======\n"
GET -USf -m $mm http://www.victim.com/does/not/exist/OTQ4NzEzMzgxNTg3NzE3NTg1MzA2MzkK
done
それぞれのHTTPコードを検査する必要があります。405と406は、許可されていないメソッドのインジケーターです。上記のメソッドリストは不完全であり、WebDAVはさらに多くのメソッドを追加します IANA HTTPメソッドレジストリ も参照してください(独自のメソッドもあり、古いバージョンには少なくとも1つのX-MS-
プレフィックス付きメソッドがありました) MS-Exchangeの)。
最後に、Webサイトをリモートでスキャンして詳細なレポートを生成する便利なオンラインツールがあります http://www.askapache.com/online-tools/request-method-scanner/ 。これもOPTIONS
メソッドのみを使用します。
この質問には有効で良い答えがたくさんありますが、Firefox用のLiveHTTPHeadersアドオンを取得してから、新しいHTTP動詞を使用してWebサイトへの要求を再生することもできます。
この手法は、HTTP動詞の改ざんと呼ばれることが多く、侵入テストの際に非常に役立ちます。
ここ は簡単なpythonスクリプトです。これはHTTP動詞のリストをループし、応答を取得して出力します
これを行う別の方法は、人気のある HTTPieクライアント、別名http
を使用することです。
$ http TRACE https://127.0.0.1 fooHeader:barValue
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 257
Content-Type: message/http
Date: Mon, 20 Nov 2017 19:51:56 GMT
Server: Apache/2.4.27 (Amazon) mod_wsgi/3.5 Python/2.7.12
TRACE / HTTP/1.1
Host: 127.0.0.1
Accept: */*
Accept-Encoding: gzip, deflate
fooHeader: barValue
User-Agent: HTTPie/1.0.0-dev
Connection: keep-alive
それがどのように応答し、カスタムヘッダーもエコーバックするかに注意してください。