FC2ブログ

CSRF対策の実施

CSRF対策の実施

#07 CSRF対策を施そう
http://dotinstall.com/lessons/poll_php_v2/9707
を参考に
セキュリティを高めるためにCSRF対策を施す

sha1はハッシュで、暗号化とは異なり求み戻せない
暗号化の場合は、鍵があれば元に戻せる

今回、編集するファイルは index.php

まず、投稿されたかどうか判定する

if($_SERVER['REQUEST_METHOD'] != 'POST')

!= 'POST'はPOSTではない
つまり投稿されていない状態という意味

else のほうに、投稿されたときの処理を書く

投稿前の処理で、CSRF対策をしておく
CSRF対策は、トークンをフォームにセットして
投稿された後に、このフォームから投稿されたものか
値をチェックすることで判定する
これは、偽者のフォームなど、悪意あるフォームからの投稿を防ぐため

まず、セッションをみて
トークンがセットされていないなら、トークンをセットする

if(!isset($_SESSION['token'])){
とすれば判定できる

isset() は指定した値が入っているかチェックする
http://php.net/manual/ja/function.isset.php
を参考

トークンの中身は推測されにくいランダムな文字列を使う
このときに sha1() を使う
暗号化した文字列を取得するのに使う
http://phpjp.com/sha1.htm
を参考に

この中で mt_rand() という乱数を発生させる関数
これについては
乱数を生成する(rand, mt_rand)
http://www.phpbook.jp/func/math/index1.html
を参考

そして
uniqid()
これは
マイクロ秒単位の現在時刻にもとづいた、接頭辞つきの一意な ID を取得
一意というのは、他と被らないただ1つという意味
uniqid() で true が設定されていると
23文字になる
これについては
http://phpspot.net/php/man/php/function.uniqid.html
を参考

これらを元に
$_SESSION['token'] = sha1(uniqid(mt_rand(),true));
これでハッシュ化されたランダムな文字列を作り
token に設定している

また、セッションを使うため

require_one() の下あたりに
session_start();
を追記する

ここからセッション開始になる

また、HTMLのフォーム部分に
セッショントークンを埋め込むため
<input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>">
というように
type="hidden" にして画面には表示されないようにして
おく

実行後、ブラウザでソースをみると、値がセットされているのがわかる
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

コメント

非公開コメント

最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック