【发布时间】:2016-09-16 12:04:12
【问题描述】:
我正在尝试将 CSRF 令牌添加到我的表单中。问题是当我将它添加到文件中时,我会回显会话令牌,它与名为“令牌”的输入中的令牌匹配。但是当我提交页面并使用 Token::check 它返回 false 并且如果我再次从输入和会话中回显令牌值,我会看到会话值已更改但输入值保持不变。
<?php
class Token{
public static function generate(){
return $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32));
}
public static function check($token){
if(isset($_SESSION['token']) && $token == $_SESSION['token']){
unset($_SESSION['token']);
return true;
}else{
return false;
}
}
}
?>
这里是控制表单的php。
$token = $_POST['token'];
if(Token::check($token)){ //Continue with more code }
以下是处理令牌的表单部分:
<input type="hidden" name="user_id_update" value="<?php echo $user_info[0][0]->id; ?>"/>
<input type="hidden" name="time_update" value="<?php echo $time; ?>"/>
<input type="hidden" name="token" value="<?php echo Token::generate(); ?>"
<hr />
<div class="form-group">
<input type="submit" id="submit_update" value="Update" class="btn btn-success"/>
</div>
如果有人能对此有所了解,我将不胜感激,因为我已经在网上搜索了几个小时,但找不到答案。谢谢。
【问题讨论】:
-
根据您的示例代码和解释,我没有发现任何问题。正在发生的其他事情尚未提供,这使它成为一个完整的猜谜游戏。