web-dev-qa-db-ja.com

Cookieは単純なHTTPヘッダーよりも安全ですか?

最近、Cookieは通常の古いHTTPヘッダーよりも「安全」であると言われました。これは、特にアクセストークンを渡す場合、URLパラメーターよりも安全です。 HTTPヘッダーよりも安全なCookieの背後にある理由は何ですか?

また、URLパラメータが安全でない理由を理解していると確信しています。これは、常に表示され、簡単に取得できるためです。あれは正しいですか?

15
mergesort

Cookie are HTTPヘッダー。ヘッダーの名前はCookie:で、Cookieが含まれています。

ただし、実際にはCookieは他のドメインに送信されないため、CookieはURLパラメータよりも安全です。一方、URLパラメータは、URLパラメータを含むサイトから直接アクセスするサイトのReferer:ヘッダーになります。

23
tylerl

ブラウザからデータを渡すための3つの標準的な方法があります:GETPOST、およびCookie(GETPOSTの両方の要求に対して送信されます)。 www.example.org/spec.html?secret=fooを要求した場合にサーバーに送信されるリクエストの例を次に示します。

GET /spec.html?secret=foo HTTP/1.1
Host: www.example.org
Cookie: name=value; name2=value2
Accept: */*

URLにセッション情報を入れると、ブラウザのユーザーによってコピーされやすくなります。ただし、ワイヤ上の可視性の観点からは、違いはありません。このため、機密データが頻繁にPOSTedされます。どちらの方法でリクエストを行う場合でも、おそらく [〜#〜] csrf [〜#〜] から保護する必要があることに注意してください。

Cookieについては、セッションの期間中、またはブラウザのタブ全体に持続するデータを保存する方法を提供します。

8
Jeff Ferland

Httpヘッダーを介して認証トークンを渡す場合は、リクエストを行うたびにこれをサーバーに渡すためのクライアント側ロジックが必要です。スキマーはクライアント側のコードでこれを探し、Javaスクリプトを使用してユーザーセッションをハイジャックできます。

ただし、同じ情報がCookieを介して渡される場合、リクエストが行われるたびにCookieを渡すのはブラウザーの責任です(クライアント側のロジックを記述する必要はありません)。そのため、トークンが渡されるメカニズムを特定するのが少し難しくなります(不可能ではありません)。

Cookieがhttponlyに設定されている場合、JavaScriptを介したセッションハイジャックはほぼ不可能になります(一部のブラウザはこの情報をJavaScriptに提供しますが、サポートは増加しています)。また、Cookieには同じOriginポリシーがあります。しかし、フィドラーなどのツールを使用すると、ハッカーはこの情報にアクセスできるようになります。

しかし、ハッカーはこの情報を入手するためにネットワークを盗聴できるはずです。

結論として、クッキーは間違いなくより安全です。

セキュリティについて非常に懸念している場合は、SSL証明書を使用してください。これにより、ネットワークが無駄なアクティビティを盗聴する脅威がほとんどなくなります。

3
Mr.X

Cookieは HTTPヘッダー の一部であるため、自分自身より安全にすることはできません。 Cookieには、仕様に組み込まれたセキュリティフラグがあります。 HTTPOnly およびSecure。後者は、非SSL接続での送信を防止します。

URLの一部としてのパラメーターは、統計情報の一部として実行しているWebサービスによってログに記録される傾向があります。それ以外の場合は、アクセス可能なすべてのユーザーがプレーンテキストで読み取ることができます。

3
Ditmar Wendt
  1. URLパラメータはRefererヘッダーで他のサイトに送信されるため、機密データを渡す最悪の方法です。

  2. (廃止) Cookie2 header は、サイトが提供するnonceを使用して暗号化されていますSet-Cookie2応答ヘッダー。したがって、これは最も悪いことではありませんが、十分にサポートされていません。

  3. 他のリクエストヘッダー(Cookieを含む)は、その中間にあります。

これらのオプションはどれも「安全」ではありません。

only安全なオプションは、相互に信頼された認証局を使用するHTTPS(つまりSSL)です。

2
Nicholas Shanks

クッキーとヘッダーの両方に長所と短所があると思います。いくつかの回答はすでにクッキーの長所を指摘しているので、ヘッダーの長所について述べます。ヘッダーは、jsアプリケーションによってプログラムで送信する必要があります。これらは、それぞれのドメインのURLにアクセスしたときに、ブラウザによって自動的に送信されることはありません。これにより、他のjsアプリケーションまたはスニペットがヘッダーを自動的に送信できなくなり、CSRFまたはクロスサイトスクリプティング領域での攻撃全体が排除されます。もちろん、TLS over HTTPSのみを使用し、HTTPへのダウングレードを無効にする必要があります。

1
NicuMarasoiu