「cookie」に「httponly属性」を設定した場合、
Javascriptから当該のcookieを参照できなくなる
(JavaScriptを利用してCookieを悪用するタイプのXSSなどに対して有効な手段)
ぺージ遷移においてセッション管理を行う場合は$_session(php)を利用するのがよいだろう。
※サーバー側のセッションIDとブラウザ側のクッキーに格納されたPHPSESSIDが一意な同一のIDである。検証としてsession ID の確認を行う事。
(session_id() は現在のセッションのセッション ID を返します)
ウェブ制作で注意が必要なCSRF(クロスサイト・リクエスト・フォージェリ)対策
基本知識
- バリデーション
- 入力されたデータの妥当性確認(内容チェック)
- サニタイジング( エスケープ処理 / 除外など)
- 特別な意味を持つ記号を「無害化」する行為
- 特別な意味を持つ記号を変換する処理 (PHP の htmlspecialchars 関数など)
サニタイジングは「サニタイジングをすべき」=「セキュリティを高める」と解釈。
例:「サニタイジングは何でしてる?」「エスケープしてます (特殊文字を変換)」
必須:POST送信において、値の検証(バリデーション)を行う
まず当たり前だが秘密情報はページに表示させない。
秘密情報をpost送信するならば「hidden パラメータ」で出力する。
<input type="hidden" id="id" name="id" value="1234">とすることで
html上では表示されず、post送信を可能とする。
※検証
<form action="" method="post">
<p>name:<input type="text" id="" name="" value=""></p>
<p>年齢:<input type="number" id="" name="" value=""></p>
<input type="hidden" id="" name="" value="1234">
<input type="submit" value="送信する">
</form>
html上では表示されず「id value "1234"」を送信できたがDevTool上では確認が出来てしまう
※検証
動的サイトで
サインインの実装例
ページ遷移「入力画面 → 確認画面 → 登録処理」
①入力画面 : ユーザー入力値をPOST送信
②確認画面:バリデーションを行い最適であれば表示。秘密情報はhiddenとして非表示にしてPOST送信出来る様にする。
③
セッションハイジャックのチェック
ログイン時に乱数文字列(トークン)を生成し、クッキーとセッション変数の両方に記憶させる。認証確認時にクッキー上のトークンとセッション変数のトークンの値を比較し、同一である場合のみ、認証されていると認識する。