2016年11月8日火曜日

CSRF (Cross site request forgeries) クロス サイト リクエスト フォージェリ

CSRF対策 メモ(php)

参考)ドットインストール
http://dotinstall.com/lessons/bbs_php_v2/24508
http://dotinstall.com/lessons/bbs_php_v2/24509

1) フォームをポストするファイルにトークンを仕込む。

  1.トークンを作る
    例) $token=sha1(uniqid(mt_rand(),true))

  2.サーバ上に記録。
    (1) session_start() で、セッションを使えるようにして、
    (2) 変数 $_SESSION['token'] にトークンをセット。
  
  3.トークンをデータとともに送信する
    formからPOSTで、データとトークンを送り出す


2) データ受取りの処理をするファイルで、
  サーバ上の記録と、POSTで受け取ったトークンを比較する。

  サーバ上に記録がなかったり、値が異なっている場合は、異常。
  if ( empty($_SESSION['token'])  ||  ($_SESSION['token'] != $_POST['token']) ) 


---------------
◆ session_start エラー

 エラーメッセージがでた :
Warning: session_start() [function.session-start]: Cannot send session cookie....

session_start() は、必ず、先頭に記述すること。
http://www.phppro.jp/phpmanual/php/ref.session.html
http://www.phppro.jp/phpmanual/php/function.session-start.html

---------------
◆_CSRF対策のトークンをワンタイムにしたら意図に反して脆弱になった実装例
徳丸浩の日記 2011年01月27日
http://www.tokumaru.org/d/20110127.html

(本文より)> トークン生成は安全な乱数を用いるべきであり、安全な疑似乱数生成器がない場合は、セッションIDそのものを使う方法が妥当

(コメントより)> 時刻を種にしても安全性はたいして向上しない

---------------
◆CSRF対策の実際
2011年3月4日 23:17
http://www.phppro.jp/qa/3140
answerer:ockeghem 3月7日 09:20
・トークンの要件は、「第三者に推定されないこと」
・セッションID(session_id)は推定されない(ように対策されている)という前提をおくことができます
・トークンとして推測の困難なものを使っている場合、それに加えてハッシュ関数を通す必要はありません

---------------

0 件のコメント:

コメントを投稿

BloomというAI

オープンソースのAI「BLOOM」が出ました。 日本語も使えるというので、早速サンプルページで遊びました。 白い文字が私。ピンクの文字がAI。 ↑AIとやりとり できたのが、これ。AIとの合作超短編童話😆 『 傘をさして公園を歩いていたら、小さなリスが足...