我为我的表单编写了一个 CSRF 保护并添加了一个隐藏令牌。帖子被发送到相同的操作。所以我的formAction
代码如下所示:
if($this->getRequest()->isPost()) {
$token = $this->_getParam('token');
if(isset($this->session->token) &&
isset($cellarToken) &&
$token == $this->session->token) {
......process form.......
}
else {
error_log('possible CSRF attack');
}
}
else {
$this->session->token = md5(uniqid(mt_rand(),true));
$this->view->token = $this->session->token;
}
在我看来html我添加:
<input type="hidden" value="<?= $this->token; ?>" name="token" />
这适用于所有主流浏览器,但在 Chrome、Safari 等 Webkit 浏览器中确实存在一些问题。在这里,我在后台收到对我的联系人的第二个 GET 请求,该请求会生成一个新令牌,因此该表单无效....
有谁知道第二个请求来自哪里?如果它是我自己的代码,那么所有浏览器中都会有第二个请求......
问候