13,005
回編集
633行目: | 633行目: | ||
== セッションとクッキーの使用例 == | == セッションとクッキーの使用例 == | ||
以下の例では、セッション管理、セキュリティ対策、ユーザ設定管理等の実務的な実装パターンを示している。<br> | |||
<br> | |||
* セキュリティ対策 | |||
** HTTPOnly設定によるXSS対策 (重要) | |||
** Secure属性によるHTTPS強制 | |||
** SameSite属性によるCSRF対策 (重要) | |||
** セッションID再生成によるセッション固定攻撃対策 (重要) | |||
** セッションハイジャック対策 (重要) | |||
**: ログイン成功時に必ず新しいセッションIDを発行する。 | |||
**: セッションIDをURLパラメータで渡さない。 | |||
**: セッションIDの推測を困難にする。 | |||
**: HTTPSを使用してセッションIDの盗聴を防ぐ。 | |||
<br> | |||
* セッション管理 | |||
*: ユーザ認証状態の管理 | |||
*: セッションタイムアウトの実装 | |||
*: 適切なログアウト処理 | |||
<br> | |||
* ショッピングカート機能 | |||
*: カートの状態をセッションで管理 | |||
*: 商品の追加・削除機能 | |||
*: カート内容の保持 | |||
<br> | |||
* ユーザ設定管理 | |||
*: クッキーを使用した長期的な設定の保存 | |||
*: セキュアなクッキー設定 | |||
*: デフォルト値の設定 | |||
<br> | |||
設計においては、クラスベースの整理された実装、責任の分離が重要となる。<br> | |||
また、セッション切れの場合の処理、バリデーションの実装も同様である。<br> | |||
<br> | |||
必要最小限のデータのみをセッションに保存することや適切なタイムアウト設定も必要である。<br> | |||
<br> | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
<?php | <?php | ||
640行目: | 673行目: | ||
* session.cookie_httponly: JavaScriptからのクッキーアクセスを防止し、XSS攻撃によるセッションID漏洩を防ぐ | * session.cookie_httponly: JavaScriptからのクッキーアクセスを防止し、XSS攻撃によるセッションID漏洩を防ぐ | ||
* session.cookie_secure: HTTPS接続時のみクッキーを送信し、通信経路上での盗聴を防ぐ | * session.cookie_secure: HTTPS接続時のみクッキーを送信し、通信経路上での盗聴を防ぐ | ||
* session.cookie_samesite: | * session.cookie_samesite: CSRF (クロスサイトリクエストフォージェリ) 攻撃からの保護 | ||
* - 'Lax' | * - 'Lax'設定:他サイトからのGETリクエストのみクッキーを送信許可 (POSTは制限) | ||
*/ | */ | ||
ini_set('session.cookie_httponly', 1); | ini_set('session.cookie_httponly', 1); |