我正在运行下面的代码以防止CSRF漏洞
if (!isset($_POST['_token'])) {
$_SESSION['_token'] = bin2hex(random_bytes(20));
}并且我在名为_token的隐藏输入中使用了令牌。我在main.js文件中使用了以下代码,以便用户可以将产品添加到他们的收藏夹中。
const wishlist = {
'add': function (id) {
$.ajax({
url: 'api/wishlist?method=add',
type: 'post',
dataType: 'json',
data: 'id=' + id + '&_token=' + $('input[name="_token"]').val(),
success: function (response) {
console.log(response)
}
})
},
'remove': function (id) {
$.ajax({
url: 'api/wishlist?method=remove',
type: 'post',
dataType: 'json',
data: id,
success: function (response) {
console.log(response)
}
})
}
};下面是用wishlist.php编写的代码,ajax请求将发送到该代码
<?php
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
header('Location:' . site_url('404'));
}
if (!isset($_POST['_token']) or $_POST['_token'] != $_SESSION['_token']) {
die('Invalıd CSRF Token!');
}
if ($_GET['method'] == 'add') {
$json['method'] = "adding to favorites";
}
if ($_GET['method'] == 'remove') {
$json['method'] = "removeing from favorites";
}所有的代码都是这样的,但有时这段代码会工作,有时它会给出无效的csrf令牌错误,有时它会工作3-5次,然后再次出现错误。
发布于 2021-05-06 05:27:18
我找到了解决方案。这是因为客户端正在尝试访问不存在文件,以便请求者执行init.php
https://stackoverflow.com/questions/67407189
复制相似问题