私は CSRF に関する多くの記事を読みましたが、それらのほとんどすべてが非表示のトークンである同じ解決策を持っているため、CSRF を防止するコードを書き、その後自分のページをハッキングしようとしましたが、うまくいきませんでした。私のコードはCSRF防弾であり、とにかくその周りにある場合。
フォームが含まれる 4 つのページがあるため、各ページに次のように記述します。
if (isset($_POST['submit'])){
// Check for CSRF token
if ($_SESSION['token'] === $_POST['token']){
// write to db
}else{
// CSRF attack has been detected
die("CSRF :<br>1: $_SESSION[token] <br> 2: $_POST[token]");
}
}else{
// assign CSRF prevention token
$form_token = md5((rand(1,89412) * 256 / 4).$date.time());
$_SESSION['token'] = $form_token;
}
?>
<form action='' method='post'>
<input type='hidden' name='token' value='<?echo $form_token;?>'>
この方法は、攻撃者が私の Web サイトで CSRF を使用するのを阻止するのに十分でしょうか?
どうもありがとう。