セキュリティ

CSRF対策

 

どういう攻撃なの?

  • 攻撃者のサイトから、別のサイトにPOSTなどのメソッドを利用してフォーム送信が出来ることを利用した攻撃。
  • CSRF(cross-site request forgeries)
    クロスサイトリクエストフォージェリ、サイト間でのリクエストの強奪

 

CSRF脆弱性

以下のような攻撃(CSRF攻撃)を可能にする脆弱性を指す[1]:攻撃者はブラウザなどのユーザ・クライアントを騙し、意図しないリクエスト(たとえばHTTPリクエスト)をWebサーバに送信させる。Webアプリケーションがユーザ・クライアントからのリクエストを十分検証しないで受け取るよう設計されている場合、このリクエストを正規のものとして扱ってしまい、被害が発生する。CSRF攻撃はURL[1]、画像の読み込み[1]、XMLHttpRequest[1]などを利用して実行される。

具体的被害としてはデータの漏えい[1]、意図しないコードの実行[1]、権限の取得[1]、なりすまし[1]、防御メカニズムの回避[1]、アプリケーションデータの読み取り[1]などがありうる。権限の取得が可能な場合、その被害はユーザの持つ権限に依存する。ログインしていない状態でも起こりうる主な被害としてユーザ・クライアントに電子掲示板などへ書き込みをさせる行為があり[6]、これを利用してユーザを装った犯罪予告(例:パソコン遠隔操作事件)や大量の書き込みをさせるDoS攻撃(例:「ぼくはまちちゃん」 騒動)といった事件が発生した。

@see Wikipedia

 

 

具体的には?

  • 掲示板やSNSに勝手に投稿されてしまう
  • ECショップにログインしていた場合に買い物されてしまったりする。
  • ネットバンクなら勝手に送金されてしまったりする。

攻撃者のサイトにアクセスした場合かつ掲示板、SNS、ECショップ、ネットバンクのフォームでCSRF対策を行っていなかった場合に限るので、どこが対策していないかは明確にわかる。

 

どう対策すれば良いの?

  • 実装は簡単です、フォーム処理では必ず実装する癖をつける
  • フレームワークを利用すると一行で済む

Laravelの場合

<form method="POST" action="post">
{{ csrf_field() }}
<input type="text" name="user" value="">
</form>

{{ csrf_field() }}の一行で済みます。

 

フォーム入力ページ

  1. ワンタイムトークンを生成する
    // 毎回異なるトークンでなければいけない
  2. トークンをセッションに入れる
  3. トークンをhiddenで完了ページに渡す

 

フォーム完了ページ

  1. セッションに入っているトークンと、hiddenで渡されたトークンが正しいかを照合して合致しているかチェックする
    →合致していなかったら、エラーメッセージを返して終了させる
  2. フォームのプログラムを実行する
    // メール送信や、DBへの格納など

 

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)