最近、Cookieは通常の古いHTTPヘッダーよりも「安全」であると言われました。これは、特にアクセストークンを渡す場合、URLパラメーターよりも安全です。 HTTPヘッダーよりも安全なCookieの背後にある理由は何ですか?
また、URLパラメータが安全でない理由を理解していると確信しています。これは、常に表示され、簡単に取得できるためです。あれは正しいですか?
Cookie are HTTPヘッダー。ヘッダーの名前はCookie:
で、Cookieが含まれています。
ただし、実際にはCookieは他のドメインに送信されないため、CookieはURLパラメータよりも安全です。一方、URLパラメータは、URLパラメータを含むサイトから直接アクセスするサイトのReferer:
ヘッダーになります。
ブラウザからデータを渡すための3つの標準的な方法があります:GET
、POST
、およびCookie(GET
とPOST
の両方の要求に対して送信されます)。 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にセッション情報を入れると、ブラウザのユーザーによってコピーされやすくなります。ただし、ワイヤ上の可視性の観点からは、違いはありません。このため、機密データが頻繁にPOST
edされます。どちらの方法でリクエストを行う場合でも、おそらく [〜#〜] csrf [〜#〜] から保護する必要があることに注意してください。
Cookieについては、セッションの期間中、またはブラウザのタブ全体に持続するデータを保存する方法を提供します。
Httpヘッダーを介して認証トークンを渡す場合は、リクエストを行うたびにこれをサーバーに渡すためのクライアント側ロジックが必要です。スキマーはクライアント側のコードでこれを探し、Javaスクリプトを使用してユーザーセッションをハイジャックできます。
ただし、同じ情報がCookieを介して渡される場合、リクエストが行われるたびにCookieを渡すのはブラウザーの責任です(クライアント側のロジックを記述する必要はありません)。そのため、トークンが渡されるメカニズムを特定するのが少し難しくなります(不可能ではありません)。
Cookieがhttponlyに設定されている場合、JavaScriptを介したセッションハイジャックはほぼ不可能になります(一部のブラウザはこの情報をJavaScriptに提供しますが、サポートは増加しています)。また、Cookieには同じOriginポリシーがあります。しかし、フィドラーなどのツールを使用すると、ハッカーはこの情報にアクセスできるようになります。
しかし、ハッカーはこの情報を入手するためにネットワークを盗聴できるはずです。
結論として、クッキーは間違いなくより安全です。
セキュリティについて非常に懸念している場合は、SSL証明書を使用してください。これにより、ネットワークが無駄なアクティビティを盗聴する脅威がほとんどなくなります。
URLパラメータはReferer
ヘッダーで他のサイトに送信されるため、機密データを渡す最悪の方法です。
(廃止) Cookie2
header は、サイトが提供するnonceを使用して暗号化されていますSet-Cookie2
応答ヘッダー。したがって、これは最も悪いことではありませんが、十分にサポートされていません。
他のリクエストヘッダー(Cookie
を含む)は、その中間にあります。
これらのオプションはどれも「安全」ではありません。
only安全なオプションは、相互に信頼された認証局を使用するHTTPS(つまりSSL)です。
クッキーとヘッダーの両方に長所と短所があると思います。いくつかの回答はすでにクッキーの長所を指摘しているので、ヘッダーの長所について述べます。ヘッダーは、jsアプリケーションによってプログラムで送信する必要があります。これらは、それぞれのドメインのURLにアクセスしたときに、ブラウザによって自動的に送信されることはありません。これにより、他のjsアプリケーションまたはスニペットがヘッダーを自動的に送信できなくなり、CSRFまたはクロスサイトスクリプティング領域での攻撃全体が排除されます。もちろん、TLS over HTTPSのみを使用し、HTTPへのダウングレードを無効にする必要があります。