CSRF Token sessionı değişmemesi gereken yerde değişiyor
CSRF sorununu önlemek için aşağıdaki kodu bütün sayfalar çalıştığında çalışan init.php dosyamda çalışıtırıyorum.
if (!isset($_POST['_token'])) {
$_SESSION['_token'] = bin2hex(random_bytes(20));
}
ve bunu formlarımda hidden olarak _token namei ile gönderiyorum. Kullanıcının ürünü favorilerine ekleyebilmesi için main.js dosyamda aşağıdaki kodu kullanıyorum
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)
}
})
}
};
Tokeni de gördüğünüz gibi bu şekilde gönderiyorum ve aşağıda ise bu ajaxın yönlendirildiği wishlist.php dosyam var
<?php
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
header('Location:' . site_url('404'));
}
if (!isset($_POST['_token']) or $_POST['_token'] != $_SESION['_token']) {
die('Geçersiz CSRF Token!');
}
if ($_GET['method'] == 'add') {
$json['method'] = "ekleme yapılıyor";
}
if ($_GET['method'] == 'remove') {
$json['method'] = "silme yapılıyor";
}
Kodların hepsi bu şekilde ancak bazen bu kod çalışyor bazen ise geçersiz csrf token hatası alıyorum bazen ise 3-5 kere kod çalıştıktan sonra csrf token hatası veriyor 1 gündür çözemedim.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!