「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送信出来る様にする。

 

セッションハイジャックのチェック

ログイン時に乱数文字列(トークン)を生成し、クッキーとセッション変数の両方に記憶させる。認証確認時にクッキー上のトークンとセッション変数のトークンの値を比較し、同一である場合のみ、認証されていると認識する。