v2.5.2
Giriş yap

CSRF Token sessionı değişmemesi gereken yerde değişiyor

fuatogur
397 defa görüntülendi

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.

Cevap yaz
Cevaplar (1)
fuatogur
1088 gün önce

Sorunu çözdüm image_url() fonksiyonu içinde geçirdiğim bazı değerler null olunca otomatik olarak localhost/upload/files a istek yolluyormuş ve bu da tokenin değişmesine sebep oluyordu