LoginSignup
16
24

More than 5 years have passed since last update.

【PHP】CSRFとは-----対策

Last updated at Posted at 2017-04-06

CSRF

CSRF定義(WiKi)

クロスサイトリクエストフォージェリ (cross-site request forgeries) は、Webアプリケーションの脆弱性の一つもしくはそれを利用した攻撃。略称はCSRF(シーサーフ (sea-surf) と読まれる事もある)、またはXSRF。リクエスト強要、セッションライディング (session riding) とも呼ばれる。

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

対策

formのhidden値は暗号学的関数を通しておくという方法を紹介します。

キーワード

openssl_random_pseudo_bytes
  疑似乱数のバイト文字列を生成する
bin2hex
  バイナリのデータを16進表現に変換する

Web送信受信対策
送信側.php
//安全安心なトークンを作成(32桁数)
$TOKEN_LENGTH = 16;
$tokenByte = openssl_random_pseudo_bytes($TOKEN_LENGTH);
$csrfToken = bin2hex($tokenByte);

//セッションに設定
$_SESSION['csrfToken'] = $csrfToken;
送信側.html
//formhidden値に設定
<input type='hidden' name='csrf' value='{$csrfToken}'>
受信側.php
if ($_POST['csrfToken'] === $_SESSION['csrfToken']) {
  //正常処理
} else {
  //CSRF攻撃が発生
}

参考:
CSRF定義(WiKi)
攻撃の手法・特徴
リクエスト強要(CSRF)対策

---I Love PHP (。・ω・。)ノ♡

16
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
24