私はセキュリティにかなり慣れているので、基本的な質問は許しますが、SSLはPOSTリクエストを暗号化しますが、GETリクエストは暗号化しませんか?
たとえば、2つのリクエストがある場合
GET:www.mycoolsite.com/index?id=1&type=xyz
POST
サイト:www.mycoolsite.com/index {パラメータ:id = 1&type = xyz}
GETリクエスト全体(IDとタイプを読み取る)を傍受できると想定しても安全ですか?ただし、POST)を傍受すると、サイトパスを表示できますSSL経由で行っている、彼らはIDとタイプのパラメータを見ることができませんか?
さて、問題は、HTTPリクエストがどのように見えるか知っていますか?
まあ、そうではないと仮定して、これがその例です:
GET /test?param1=hello¶m2=world HTTP/1.1
Host: subdomain.test.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
この情報のすべては、SSLトランスポート内にカプセル化されます-回答のコメントに親切に書かれています。これの意味は:
必ずしも安全ではないもの:
Host: something
パラメーターをサポートしているため、1つのインターフェースとIPアドレスで1つのWebサーバーが複数のドメインを処理できます。明らかに、このヘッダーisは暗号化されていますが、サイトへの非httpsトラフィックを実行する場合は、接続するホストを明確にする必要があります。そうでない場合でも、逆DNSは確かにそのIPでホストされているものを教えてくれるので、そこから妥当な推測を行うことができます。POSTリクエストは、本文が含まれていることを除いて、getリクエストに似ています。これは次のようになります。
POST /testpost HTTP/1.1
Host: subdomain.test.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
param1=hello¶m2=hello
もちろん、さらに複雑な変種もありますが、基本的にはとにかくすべて暗号化されています。
他の応答でこれが言及されていませんでしたが、通常はSSLを使用してもGETリクエストに秘密情報(パスワード)を含めないでください。代わりにPOST=を使用してください。なぜですか?機密情報は通常、たとえばブラウザの履歴リスト(https://www.example.com?user=me&password=MyPassword)やサーバーのログなど、両端に記録されます。POST情報(特にパスワードを含む)は、通常はログに記録するように構成できますが、通常はWebサーバーログに書き込まれません。そのため、異なるサイトでパスワードを再利用(または類似の)しないことが最善です。
SSLは暗号化し、要求されたメソッドとURLを含む接続全体の信頼性を保証します。 GETはPOSTと同様に保護されます。
SSLが意図したとおりに機能する場合、盗聴者は、どのIPアドレスがどのIPアドレス(およびどのポートで、ただし通常は443)に接続しているのか、いつ、どのくらいの量かを確認できます。同じマシンに複数の仮想ホストが存在する場合、攻撃者はどのホストに接続しているのかを知ることができません(ただし、盗聴者はHTTPSリクエストの直前にDNSリクエストを表示し、もっともらしい推測をする可能性があります)。この情報もすべて認証されます。アクティブな攻撃者は man-in-the-middle を再生したり、転送中のデータを変更したりすることはできません。
SSLが意図したとおりに機能しない原因:
参照 確立されているHTTPS接続を監視している人々が、それを復号化する方法を知らない可能性があるのはなぜですか? 背景について。
これがHTTPを介してどのように実行されるかについて、もう1つ小さな詳細を追加します。
おそらく、GETリクエストが暗号化されずに送信されることなく、SSLチャネルがどのように作成されるのか(または SSLハンドシェイク に精通している場合は、そうする必要がありますか?)私のリクエストがプロキシを経由する必要がある場合はどうですか-それはどのように可能ですか?
HTTP v1.1は [〜#〜] connect [〜#〜] HTTPメソッドを導入しました。これは基本的に、最も単純なホストURLのみを含むプロキシを介してサーバーに簡略化されたリクエストを送信します。パラメータ、ヘッダー、または本文)。この要求に基づいて、SSLトンネルが構築され、元のGET(またはPOST)要求がそのトンネルを介して送信されます。
言及されていないもう1つの点は、GETを使用し、サードパーティのコンテンツ(サイト広告など)が埋め込まれている、またはリンクされている場合、そのサードパーティのサイトは、Refererヘッダーに完全なURL(機密パラメータデータを含む)を取得することです。
これにより、データを保持してはならない第三者に公開します。
GETメソッド はデータの取得のみを目的としており、 副作用はありません です。しかし [〜#〜] post [〜#〜] はその特定の目的のためのものです:サーバー側でデータを変更することです。
GETリクエストは、POSTリクエストを偽造しながらページに画像を配置するだけで簡単に偽造できます( Cross-Site Request Forgery を参照)。これも簡単ではありません)許可されたPOSTリクエスト)のみを許可する必要がある理由。