質問

HTTPSを使用する安全なWebベースのAPIを作成しています。ただし、ユーザーがクエリ文字列を使用して設定(パスワードの送信を含む)できるようにすると、これも安全になりますか、POSTを介して強制的に実行する必要がありますか?

役に立ちましたか?

解決

はい、そうです。 ただし、機密データにGETを使用するのは悪い考えです。いくつかの理由があります:

  • ほとんどのHTTPリファラーの漏洩(ターゲットページの外部イメージがパスワードを漏洩する可能性がある[1])
  • パスワードはサーバーログに保存されます(明らかに悪いです)
  • ブラウザの履歴キャッシュ

したがって、クエリ文字列は保護されていますが、クエリ文字列を介して機密データを転送することはお勧めしません。

[1] RFCでは、ブラウザがリファラーをHTTPSからHTTPに送信すべきでないと述べていることに注意する必要があります。しかし、それは悪いサードパーティのブラウザーツールバーまたはHTTPSサイトからの外部画像/フラッシュがリークしないという意味ではありません。

他のヒント

「ネットワークパケットを探る」からブラウザーは最初に安全な接続を確立し、次にGETパラメーターを含むリクエストを送信するため、GETリクエストは安全です。しかし、GET urlはユーザーのブラウザー履歴/オートコンプリートに保存されます。これは、たとえばパスワードデータを入力します。もちろん、これは、より広範な「Webサービス」を利用する場合にのみ適用されます。ブラウザーからサービスにアクセスする可能性のある定義。カスタムアプリケーションからのみアクセスする場合、これは問題になりません。

したがって、少なくともパスワードダイアログには投稿を使用することをお勧めします。また、リンクで指摘されているように、littlegeekがGET URLを投稿すると、サーバーログに書き込まれる可能性が高くなります。

  

はい、クエリ文字列は暗号化されます。

背後にある理由は、クエリ文字列がアプリケーション層プロトコルであるHTTPプロトコルの一部であるのに対し、セキュリティ(SSL / TLS)部分はトランスポート層に由来するためです。 SSL接続が最初に確立され、次にクエリパラメータ(HTTPプロトコルに属する)がサーバーに送信されます。

SSL接続を確立すると、クライアントは次の手順を順番に実行します。 example.com という名前のサイトにログインしようとしており、クエリパラメーターを使用して資格情報を送信するとします。完全なURLは次のようになります。

https://example.com/login?username=alice&password=12345)
  1. クライアント(ブラウザ/モバイルアプリなど)は、最初にDNSリクエストを使用してドメイン名 example.com をIPアドレス(124.21.12.31)に解決します。その情報を照会する場合、ドメイン固有の情報のみが使用されます。つまり、 example.com のみが使用されます。
  2. 今、クライアントはIPアドレス 124.21.12.31 でサーバーに接続しようとし、ポート443(デフォルトのHTTPポート80ではなくSSLサービスポート)に接続しようとします。
  3. 今、 example.com のサーバーはクライアントに証明書を送信します。
  4. クライアントは証明書を検証し、セッションの共有秘密鍵の交換を開始します。
  5. 安全な接続が正常に確立された後、安全な接続を介してクエリパラメータが送信されます。

したがって、機密データを公開することはありません。ただし、この方法を使用してHTTPSセッションで資格情報を送信するのは最善の方法ではありません。別のアプローチをお勧めします。

はい。 HTTPSセッションのテキスト全体がSSLで保護されています。クエリとヘッダーが含まれます。その点で、POSTとGETはまったく同じです。

メソッドのセキュリティに関しては、適切な検査なしに発言する本当の方法はありません。

SSLは最初にホストに接続するため、ホスト名とポート番号はクリアテキストとして転送されます。ホストが応答し、チャレンジが成功すると、クライアントはHTTPリクエストを実際のURL(つまり、3番目のスラッシュの後のもの)で暗号化し、サーバーに送信します。

このセキュリティを破る方法はいくつかあります。

「中間者」として動作するようにプロキシを設定することができます。基本的に、ブラウザはプロキシに実サーバーに接続する要求を送信します。プロキシがこのように構成されている場合、SSLを介して実サーバーに接続しますが、ブラウザーはプロキシと通信します。そのため、攻撃者がプロキシにアクセスできる場合、プロキシを通過するすべてのデータをクリアテキストで見ることができます。

リクエストはブラウザの履歴にも表示されます。ユーザーはサイトをブックマークしたいと思うかもしれません。一部のユーザーにはブックマーク同期ツールがインストールされているため、パスワードはdeli.ci.usまたは他の場所に置かれる可能性があります。

最後に、誰かがあなたのコンピューターをハッキングし、キーボードロガーまたはスクリーンスクレーパーをインストールした可能性があります(そして、多くのトロイの木馬型ウイルスがインストールします)。パスワードは(パスワードダイアログの「*」ではなく)画面に直接表示されるため、これは別のセキュリティホールです。

結論:セキュリティに関しては、常にbeatられた道に頼ってください。知らないこと、考えないこと、首を痛めることになるものが多すぎます。

[...] HTTPリファラーの漏洩(ターゲットページの外部イメージがパスワードを漏洩する可能性があります) stackoverflow.com/questions/323200/is-a-https-query-string-secure#323286">Sloughの応答。

HTTP 1.1 RFC 明示的に記述

  

クライアントにはリファラーを含めるべきではありません   (非セキュア)HTTPのヘッダーフィールド   参照元ページが   安全なプロトコルで転送されます。

とにかく、サーバーログとブラウザー履歴は、クエリ文字列に機密データを入れない十分な理由です。

はい、モニターで肩越しに見ている人がいない限り。

はい、HTTPS接続を確立した瞬間からすべてが安全です。 POSTとしてのクエリ文字列(GET)はSSL経由で送信されます。

ソルトを追加したパスワードをMD5ハッシュパラメーターとして送信できます。サーバー側で認証を比較します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top