Странные символы кодирования URL в конце токенов CSRF Laravel Sanctum - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь узнать, как использовать Laravel Проверка подлинности Sanctum. Когда я отправляю GET https://localhost/sanctum/csrf-cookie, я получаю следующие файлы cookie CSRF:

XSRF-TOKEN=eyJpdiI6Inhvb0FDVXdHZDU5QzBqQTNKaWNxTUE9PSIsInZhbHVlIjoiSXNudjNiNE9xbmtNVWdsQ0l2SDRyYUNPQXIrTGJLb2ZMVDc2NWttenZGY0NkcDRvQzFVQlZOMDRlNFdTOHJaNiIsIm1hYyI6ImY0Y2M2YzZiZWIxYWVmZTRmMWI5NWRhNTBhN2JmM2VjNGExYjU0MGYwYWVmYTE4ODQxM2I0YTFlMWVjZTVhMDkifQ%3D%3D; 

Вы можете заметить странный% 3D% 3D в конце токена. Эти персонажи также добавлены для моего повара laravel_session ie. Когда я затем отправляю запрос с этим точным токеном в заголовке X-XSRF-TOKEN, я получаю ошибку несоответствия токена. Когда убираю персонажей - все работает. Интересно, откуда взялись эти символы и как я могу их удалить.

UPD: , поскольку это были закодированные символы URL, когда я декодировал их и вместо них ставил '==' в конце X-XSRF-TOKEN, похоже, работает. Тем не менее странно, почему это работало раньше, когда я просто удалял символы из запроса вручную.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Как вы уже знаете, = становится %3D при кодировании URL.

Обычно, когда вы встречаете строку с множеством цифр и символов в случайном порядке, и она заканчивается на ==, очень высока вероятность того, что она закодирована в base64.

= добавляется (в конце строки) в качестве заполнения, чтобы соответствовать указанному c количеству символов в строке. Подробнее об этом вы можете прочитать в этом ответе .

Чтобы ответить на ваш вопрос, я попытаюсь расшифровать данный токен в конце и без ==, я буду использовать этот онлайн-декодер , так что вы можете попробовать его на своем конце aswell.

С ==:

{"iv":"xooACUwGd59C0jA3JicqMA==","value":"Isnv3b4OqnkMUglCIvH4raCOAr+LbKofLT765kmzvFcCdp4oC1UBVN04e4WS8rZ6","mac":"f4cc6c6beb1aefe4f1b95da50a7bf3ec4a1b540f0aefa188413b4a1e1ece5a09"}

Без ==:

{"iv":"xooACUwGd59C0jA3JicqMA==","value":"Isnv3b4OqnkMUglCIvH4raCOAr+LbKofLT765kmzvFcCdp4oC1UBVN04e4WS8rZ6","mac":"f4cc6c6beb1aefe4f1b95da50a7bf3ec4a1b540f0aefa188413b4a1e1ece5a09"}

Они такие же .

Это работает, потому что они (=) просто дополняют друг друга и не содержат никакой информации.

Я не эксперт по laravel, но, полагаю, причина, по которой он не работает с %3D, заключается в том, что он не декодирует URL.

0 голосов
/ 26 апреля 2020

Да, это символ =, который является частью вашего CS64-токена base64. Я предполагаю, что это работает, только когда вы удалите его, потому что символ = является специальным символом padding . На очень высоком уровне они просто дополняют нить до нужной длины.

...