purazumakoiの[はてなブログ]

技術メモから最近はライフログも増えてきてます。

CSRF対策の例ととりあえず書いてみた。

前回、CSRFの対策について考えてみて
CSRF対策としてのトークンについて - purazumakoiの[はてなブログ]

まだ良くわかってないが半券のトークンにすれば
万が一 XSSでトークンが流出した時のことを考えると良いような気がする。

が半券だとちょっと複雑になるので、まずは簡単なものを書いてみた。

関数部分だけメモ


<?php
// 入力画面の呼び出し時に トークンを作る
function fCreateToken() {	
  // トークン生成
  $token = hash( 'sha256', session_id() );
  $_SESSION['token'] = $token;
	
  return $token;
}

// 確認画面表示時に、inputのhiddenにトークンを入れる
function fReturnToken() {
  return $_SESSION['token'];
}

// 送信する処理の前に、最初に生成したトークンと、確認画面からPOSTしたトークンを照合する
function fCheckToken($token) {
  // 照合
  if(strlen($token) > 0 && strcmp( $_SESSION['original_token'], $token ) === 0 ){
   return true;
  }
	
  return false;
}