PHPで簡単なCSRF対策

smarty拡張クラスを作る

    function smarty_function_csrf_token($params, &$o_smarty){
		if(session_id() == ""){
			session_start();
		}
		$key = session_id();
		return "<input type=\"hidden\" name=\"_csrf_token\" value=\"". $key ."\" />";	
	}

で、テンプレートで

{csrt_token}

で呼ぶと

<input type="hidden" name="csrt_token" value="session_id" />

CSRF対策したいとこに読み込むクラス

<?php
class CSRF {
		
	function __construct(){	

	}
	
	function check(){
		session_start();
		//csrf
		if($_POST[_csrf_token] !== session_id()){
			die( "error" );
			exit ;
		}
	}
	
	
	
}
?>

チェックしたいとこで

CSRF::check();

でとりあえず、前の画面からきてるかチェックできる。
smartyの部品で作ってるところからでも、どこからでも一応呼べる。

本当は

暗号化もしたほうがよいか。別に複合する必要も無いんだし。。

デファクト

あるなら、そっちに変える。