我正在使用phalcon Framework,我决定使用可用的csrf函数。我按照文档中所示的所有步骤进行了操作。
我收到数据,令牌及其值,然后我运行
$data = $this->request->getJsonRawBody();
print_r($data); //// proper data
if ($this->request->isPost()) {
if ($this->security->checkToken()) {
die('proper token');
}
else{die('NOT A proper token');}
}
我的帖子请求是这样的:
$scope.submit = function() {
$scope.formData.token = [$("#token").attr("name"), $("#token").val()];
$http.post(
'http://localhost/project/index/function',
JSON.stringify($scope.formData)
).success(function(data) { alert(data);
if (data.isValidToken) {
alert("Ok, you win!!!");
} else {
alert("Sorry, not valid CSRF !!!")
}
});
return false;
};
我检查会话数据,生成表单时存储的令牌与ajax请求完成时打印出的令牌不同。 有人能指出我做错了吗?
答案 0 :(得分:1)
Phalcon\Security::checkToken
默认使用$_POST
。如果您需要使用ajax,请将tokenKey
和tokenValue
传递给Phalcon\Security::checkToken
。
检查here
$data = $this->request->getJsonRawBody();
if ($this->request->isPost()) {
$tokenKey = $this->session->get('$PHALCON/CSRF/KEY$');
$tokenValue = $data->{$tokenKey};
if ($this->security->checkToken($tokenKey, $tokenValue)) {
die('proper token');
}
else{die('NOT A proper token');}
}