#jquery #csrf #codeigniter-4 #websecurity
#jquery #csrf #codeigniter-4 #веб-безопасность
Вопрос:
Я использовал защиту csrf в своей сети
каждый раз, когда я выполняю вызов ajax, я обновляю токен csrf, отправленный контроллером
все работает нормально
мой код :
var csrfName = '<?= csrf_token() ?>',
csrfHash = '<?= csrf_hash() ?>';
$(function() {
$.ajax({
url: "/categories/get",
type: 'post',
dataType: 'json',
data: {
[csrfName]: csrfHash,
},
success: function(result) {
// update csrf token
csrfName = result.csrfName;
csrfHash = result.csrfHash;
// my code ..
},
error: function(xhr, type, error) {
console.log(error);
}
});
$.ajax({
url: "/services/get",
type: 'post',
dataType: 'json',
data: {
[csrfName]: csrfHash,
},
success: function(result) {
// update csrf token
csrfName = result.csrfName;
csrfHash = result.csrfHash;
// my code ..
},
error: function(xhr, type, error) {
console.log);
}
});
Но когда вызывается ajax при отправке события, он показал 403 (запрещено),
Код :
// Form Order
$("form#form-order").submit(function(e) {
e.preventDefault();
let user = $("input[name=user_id]").val();
let service = $("input[name=service_id").val();
let data = $("input[name=data]").val();
let quantity = $("input[name=quantity]").val();
$.ajax({
url: "/orders/new",
type: "post",
data: {
user_id: user,
service_id: service,
data: data,
quantity: quantity,
[csrfName]: csrfHash,
},
success: function(result) {
// update csrf token
csrfName = result.csrfName;
csrfHash = result.csrfHash;
// my code ..
},
error: function(xhr,type,error) {
console.log(error);
},
});
});
я всегда обновлял токен csrf каждый раз, когда выполняю вызов ajax
кроме того, в моей форме нет атрибута action и method, чтобы убедиться, что форма не отправлена и изменяет токен csrf
Или это из-за области видимости переменной?
пожалуйста, помогите!
Комментарии:
1. Имеет ли функция
new()
внутри контроллераorders
public
видимость?2. Да, он имеет общедоступную видимость
3. Пожалуйста, опубликуйте код вашего контроллера, и если у вас есть какие-то маршруты, опубликуйте их тоже.