我读过很多关于 CSRF 的文章,几乎所有文章都有相同的解决方案,即隐藏令牌,所以我写了一个代码来防止 CSRF,然后我尝试破解我自己的页面,但它没有用,我想知道是否我的代码是 CSRF 防弹的,如果有的话。
我有四个页面,其中包含表格,因此在每个页面中我会写以下内容:
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;?>'>
这种方法是否足以阻止攻击者在我的网站上使用 CSRF?
非常感谢。