CSRF проверка в Slim с помощью сообщения Ajax - PullRequest
0 голосов
/ 24 августа 2018

Я изо всех сил пытался заставить мой CSRF работать при использовании почтовых запросов Ajax.У меня есть несколько запросов, которые будут использовать один и тот же токен CSRF.но проблема в том, что он уже дает сбой при первом запуске.(при загрузке страницы есть только один триггер)

краткий обзор кода:

Ajax-вызов:

var settings = {
                "async": true,
                "crossDomain": true,
                "url": "http://localhost:3000/locations",
                "method": "POST",
                "headers": {
                    "{{ nameKey }}": "{{ name }}",
                    "{{ valueKey }}": "{{ value }}",
                    "Cache-Control": "no-cache"
                }
            }

            $.ajax(settings).done(function (Data) {

Промежуточное ПО:

$container['csrf'] = function ($c) {
    $csrf = new \Slim\Csrf\Guard;
    $csrf->setPersistentTokenMode(true);
    return $csrf;
};
$app->add($container->get('csrf'));

Я долго искал, как решить эту проблему.Почти везде, куда бы я ни посмотрел, они говорят, чтобы установить постоянный режим токена в true, и это решит проблему.Тем не менее, когда я пытаюсь это сделать, я получаю ту же ошибку, что и несколько попыток, например, регенерировать токен перед запросом, но на данный момент ничего не работает.

Я был бы очень рад, если бы кто-нибудь мог мне помочьрешить эту проблему.

1 Ответ

0 голосов
/ 27 августа 2018

Я обнаружил, что размещение значений CSRF, так как заголовки не работают.(почтальон дал мне эту идею при заполнении данных там) вместо этого я должен был создать форму и добавить CSRF следующим образом

                    let form = new FormData();
                    form.append("csrf_name", csrfName);
                    form.append("csrf_value", csrfValue);
                    var settings = {
                      "async": true,
                      "crossDomain": true,
                      "url": "http://localhost:3000/update,
                      "method": "POST",
                      "headers": {
                        "Cache-Control": "no-cache"
                      },
                      "processData": false,
                      "contentType": false,
                      "mimeType": "multipart/form-data",
                      "data": form
                    };

, это сработало для меня.

...