Session cheatsheet
Session_Management_Cheat_Sheet
セッション管理チートシート(翻訳しただけ)
導入
Web認証、セッション管理、アクセス制御
Webセッションとは、同じユーザーに関連付けられたネットワークHTTP要求と応答のトランザクションのシーケンスです。
最新の複雑なWebアプリケーションでは、複数の要求が続く間、各ユーザーに関する情報やステータスを保持する必要があります。そのため、セッションでは、アクセス権やローカリゼーション設定などの変数を確立する機能が提供されます。これらの変数は、セッションの期間中、ユーザーがWebアプリケーションと行うすべてのやり取りに適用されます。
Webアプリケーションは、最初のユーザー リクエストの後に匿名ユーザーを追跡するためのセッションを作成できます。たとえば、ユーザーの言語設定を維持する場合などです。さらに、Webアプリケーションは、ユーザーが認証されるとセッションを使用します。これにより、後続のリクエストでユーザーを識別できるだけでなく、セキュリティ アクセス制御、ユーザーのプライベート データへの承認済みアクセスを適用し、アプリケーションの使いやすさを向上させることができます。したがって、現在のWebアプリケーションは、認証前と認証後の両方でセッション機能を提供できます。
認証されたセッションが確立されると、セッションID (またはトークン) は、ユーザー名とパスワード、パスフレーズ、ワンタイム パスワード (OTP)、クライアント ベースのデジタル証明書、スマート カード、または生体認証 (指紋や目の網膜など) など、アプリケーションで使用される最も強力な認証方法と一時的に同等になります。OWASP認証チート シートを参照してください。
HTTPはステートレス プロトコル ( RFC2616セクション5) であり、各リクエストとレスポンスのペアは他のWebのやり取りから独立しています。したがって、セッションの概念を導入するには、Webアプリケーションで一般的に使用できる認証モ ジュールとアクセス制御 (または承認) モジュールの両方をリンクするセッション管理機能を実装する必要があります。
セッションダイアグラム
セッションIDまたはトークンは、ユーザー認証資格情報 (ユーザー セッションの形式) を、ユーザー HTTPトラフィックおよびWebアプリケーションによって適用される適切なアクセス制御にバインドします。最新のWebアプリケーションにおけるこれら3つのコンポーネント (認証、セッション管理、アクセス制御) の複雑さ、および実装とバインドがWeb開発者の手に委ねられているという事実 (Web開発フレームワークはこれらのモジュール間の厳密な関係を提供しないため) により、安全なセッション管理モジュールの実装は非常に困難になっています。
セッションIDの開示、キャプチャ、予測、ブルート フォース、または固定は、セッション ハイジャック (またはサイドジャック) 攻撃につながり、攻撃者はWebアプリケーションで被害者のユーザーを完全に偽装できます。攻撃者は、標的型と汎用型の2種類のセッション ハイジャック攻撃を実行できます。標的型攻撃の場合、攻撃者の目的は、特定の (または特権を持つ) Webアプリケーションの被害者のユーザーになりすますことです。汎用攻撃の場合、攻撃者の目的は、Webアプリケーションで任意の有効または正当なユーザーになりすます (またはアクセスする) こ とです。
セッションIDプロパティ
認証された状態を維持し、Webアプリケーション内でのユーザーの進行状況を追跡するために、アプリケーションは、セッション作成時に割り当てられ、セッション期間中にユーザーとWebアプリケーションによって共有および交換されるセッション識別子(セッションIDまたはトークン) をユーザーに提供します (セッションIDは、すべてのHTTP要求で送信されます)。セッションIDはペアですname=value。
安全なセッションIDを実装するためには、識別子 (IDまたはトークン) の生成が次のプロパティを満たす必要があります。
セッションID名のフィンガープリンティング¶ セッションIDで使用される名前は、過度に説明的なものや、IDの目的や意味について不必要な詳細を提供するものであってはなりません。
最も一般的なWebアプリケーション開発フレームワークで使用されるセッションID名は、(PHP)、(J2EE)、( ColdFusion )、 (ASP .NET)など、簡単にフィンガープリントできます。したがって、セッションID名から、Webアプリケーションで使用されるテクノロジとプログラミング言語が明らかになる可能性があります。PHPSESSIDJSESSIONIDCFIDCFTOKENASP.NET_SessionId
Web開発フレームワークのデフォルトのセッションID名を、 などの一般的な名前に変更することをお勧めしますid。