CookieとSessionの概要
5012 ワード
Cookieの概要
HTTP Cookieは、サーバがクライアントブラウザに送信し、ローカルに保存する小さなテキストデータである.ブラウザは、次回同じサーバにリクエストを送信すると、このクッキーを携帯してサーバに送信します.
Cookieは無状態のHTTPプロトコルにいくつかの情報を記録させることができる.
Cookieは、ユーザ登録状態、カート、ゲームスコア、または他の記録が必要な情報などのセッションステータス管理、ブラウザ動作追跡(ユーザ動作の追跡分析など)によく使用されます.
ブラウザは要求ヘッダのCookieによってサーバにデータを送信し,サーバは応答ヘッダのSet−CookieによってCookieをブラウザに返す.
Cookie使用
Cookieはプロパティを指定できます. Expires:有効期限.このプロパティが明記されていない場合は、セッション期間Cookieであり、クライアントが閉じられたときに終了するセッション期間Cookieであることを示します.これは、セッション期間cookieがその時点で削除されることを意味します.多くのWebブラウザでは、tabラベルをすべて保持し、ブラウザを再開したときに復元するセッションリカバリ機能がサポートされています.同時に、クッキーもブラウザを閉じたことがないのと同じように回復します. Max-age:有効期間.クッキーが無効になる前に経過する秒数.ExpiresとMax-ageの両方が存在する場合、Max-ageの優先度は高くなります. Domain:クッキーが届くホスト名を指定します.指定されていない場合、デフォルトは現在のドキュメントアクセスアドレスのホスト部分です.ドメイン名設定 Path:Cookieヘッダを送信するには、要求するリソースのパスに表示されるURLパスを指定します. Secure:セキュリティ属性を持つクッキーは、SSLおよびHTTPSプロトコルの使用を要求したときにのみサーバに送信されます.しかしながら、秘密情報または機密情報はHTTPクッキーに格納または伝送されないでください.なぜなら、メカニズム全体が本質的に安全ではないためです.例えば、前述のプロトコルは、すべての情報が暗号化されていることを意味するわけではありません. HttpOnly:HttpOnlyプロパティが設定されているクッキーは、JavaScriptを使用してDocument.cookieプロパティ、XMLHttpRequest、Request APIsを介してアクセスすることはできません.これにより、サイト間スクリプト攻撃(XSS)を防ぐことができます. …
Cookie接頭辞名には__が含まれていますSecure-または_Host-接頭辞のクッキーは、セキュリティ接続(HTTPS)を使用したドメインにのみ適用でき、secureコマンドを同時に設定する必要があります.また、クッキーが_Host-が接頭辞である場合、path属性の値は「/」(サイト全体を表す)であり、domain属性は含まれません.クッキー接頭辞をサポートしないクライアントでは、これらの追加の条件が成立することは保証されないため、クッキーは常に受け入れられる.
Cookieセキュリティ
機器が安全でない環境にある場合は、HTTP Cookieで機密情報を記憶・伝送できないことを肝に銘じてください
ここにXSSとCSRFについての記事があります
セッションハイジャックとXSS
Webアプリケーションでは、クッキーは、ユーザと認証セッションをマークするためによく使用されます.クッキーを盗む方法としては,社会工学的攻撃やアプリケーションの脆弱性を利用したXSS攻撃がよく用いられる.XSSは,ウェブサイトに悪意のあるクライアントコードを注入することにより,これら悪意のあるスクリプトによりウェブページを改ざんし,ユーザがウェブページを閲覧する際にユーザブラウザを制御または盗み取る.
CSRF
Cross Site Request Forgeryは、信頼されているユーザーがサーバに予期しない要求を送信する攻撃方式をハイジャックして偽造を要求します.通常、CSRF攻撃は、攻撃者が被害者のCookieによってサーバの信頼をだまし取るものであり、被害者が何も知らないうちに被害者名義で偽造要求を攻撃サーバに送信し、権限保護下での操作を許可なく実行することができる.
セッションの概要
sessionは、サーバの格納可能な状態(データ)に格納されたクライアントとサービス側のセッションである.セッションメカニズムもHTTP無状態のセッション追跡を解決するためである.
ユーザーがサーバへのアクセスを要求すると、クライアントを識別するsessionidが生成されます.クライアントがアクセスするたびに、セッションが存在するかどうかを確認し、存在する場合は対応するセッションが見つかります.このsessionidはクッキーに格納されるので、sessionのデフォルトはクッキーに基づいています.
クライアントがクッキーを無効にする場合、フォームドメインをURLで書き換えたり非表示にしたりしてセッション追跡を行う必要があります.
sessionのライフサイクルsessionには失効時間があり、デフォルトでは30分でサーバ側で設定できます.サーバ側は、HttpSessionのinvalidate()メソッドを呼び出してsessionオブジェクトを破棄することもできます.サーバーが正常にシャットダウンされている場合、セッションは永続化されます(ファイルに書き込まれます.セッションのデフォルトのタイムアウト時間は30分です.正常にシャットダウンされると、セッションは永続化され、30分後に削除されます).
Cookie
Session
きおくいち
クライアント
サービス側
安全度
安全でない、クッキーハイジャック、XSS、CSRF
比較的安全
リソースの使用
クライアントスペースの一部を占有
サービス側メモリ、CPU、ディスクの使用
データストア
1つのクッキーは4 Kを超えず、多くのブラウザは1つのサイトを最大20個、すべてのクッキーを最大300個制限しています.
制限なし
セッションメカニズム
サービス側が作成し、応答によってクライアントに返し、クライアントが格納し、次のサービス側へのアクセス時にサーバに携帯を要求する
ハッシュ・テーブルに似た構造を使用して情報を保存
参考記事:Java Web(三)セッションメカニズム、CookieとSession詳細セッションメカニズム詳細およびセッションに関する応用
HTTP Cookieは、サーバがクライアントブラウザに送信し、ローカルに保存する小さなテキストデータである.ブラウザは、次回同じサーバにリクエストを送信すると、このクッキーを携帯してサーバに送信します.
Cookieは無状態のHTTPプロトコルにいくつかの情報を記録させることができる.
Cookieは、ユーザ登録状態、カート、ゲームスコア、または他の記録が必要な情報などのセッションステータス管理、ブラウザ動作追跡(ユーザ動作の追跡分析など)によく使用されます.
ブラウザは要求ヘッダのCookieによってサーバにデータを送信し,サーバは応答ヘッダのSet−CookieによってCookieをブラウザに返す.
Cookie使用
Cookieはプロパティを指定できます.
Cookie接頭辞名には__が含まれていますSecure-または_Host-接頭辞のクッキーは、セキュリティ接続(HTTPS)を使用したドメインにのみ適用でき、secureコマンドを同時に設定する必要があります.また、クッキーが_Host-が接頭辞である場合、path属性の値は「/」(サイト全体を表す)であり、domain属性は含まれません.クッキー接頭辞をサポートしないクライアントでは、これらの追加の条件が成立することは保証されないため、クッキーは常に受け入れられる.
// (HTTPS) ,
Set-Cookie: __Secure-ID=123; Secure; Domain=example.com
Set-Cookie: __Host-ID=123; Secure; Path=/
// Secure ,
Set-Cookie: __Secure-id=1
// Path=/ ,
Set-Cookie: __Host-id=1; Secure
// domain ,
Set-Cookie: __Host-id=1; Secure; Path=/; domain=example.com
Cookieセキュリティ
機器が安全でない環境にある場合は、HTTP Cookieで機密情報を記憶・伝送できないことを肝に銘じてください
ここにXSSとCSRFについての記事があります
セッションハイジャックとXSS
Webアプリケーションでは、クッキーは、ユーザと認証セッションをマークするためによく使用されます.クッキーを盗む方法としては,社会工学的攻撃やアプリケーションの脆弱性を利用したXSS攻撃がよく用いられる.XSSは,ウェブサイトに悪意のあるクライアントコードを注入することにより,これら悪意のあるスクリプトによりウェブページを改ざんし,ユーザがウェブページを閲覧する際にユーザブラウザを制御または盗み取る.
CSRF
Cross Site Request Forgeryは、信頼されているユーザーがサーバに予期しない要求を送信する攻撃方式をハイジャックして偽造を要求します.通常、CSRF攻撃は、攻撃者が被害者のCookieによってサーバの信頼をだまし取るものであり、被害者が何も知らないうちに被害者名義で偽造要求を攻撃サーバに送信し、権限保護下での操作を許可なく実行することができる.
セッションの概要
sessionは、サーバの格納可能な状態(データ)に格納されたクライアントとサービス側のセッションである.セッションメカニズムもHTTP無状態のセッション追跡を解決するためである.
ユーザーがサーバへのアクセスを要求すると、クライアントを識別するsessionidが生成されます.クライアントがアクセスするたびに、セッションが存在するかどうかを確認し、存在する場合は対応するセッションが見つかります.このsessionidはクッキーに格納されるので、sessionのデフォルトはクッキーに基づいています.
クライアントがクッキーを無効にする場合、フォームドメインをURLで書き換えたり非表示にしたりしてセッション追跡を行う必要があります.
sessionのライフサイクルsessionには失効時間があり、デフォルトでは30分でサーバ側で設定できます.サーバ側は、HttpSessionのinvalidate()メソッドを呼び出してsessionオブジェクトを破棄することもできます.サーバーが正常にシャットダウンされている場合、セッションは永続化されます(ファイルに書き込まれます.セッションのデフォルトのタイムアウト時間は30分です.正常にシャットダウンされると、セッションは永続化され、30分後に削除されます).
Cookie
Session
きおくいち
クライアント
サービス側
安全度
安全でない、クッキーハイジャック、XSS、CSRF
比較的安全
リソースの使用
クライアントスペースの一部を占有
サービス側メモリ、CPU、ディスクの使用
データストア
1つのクッキーは4 Kを超えず、多くのブラウザは1つのサイトを最大20個、すべてのクッキーを最大300個制限しています.
制限なし
セッションメカニズム
サービス側が作成し、応答によってクライアントに返し、クライアントが格納し、次のサービス側へのアクセス時にサーバに携帯を要求する
ハッシュ・テーブルに似た構造を使用して情報を保存
参考記事:Java Web(三)セッションメカニズム、CookieとSession詳細セッションメカニズム詳細およびセッションに関する応用