在CSRF令牌结尾处出现奇怪的URL编码字符 Laravel Sanctum!

问题描述 投票:0回答:1

我想学习如何使用Laravel Sanctum认证. 当我发送 GET https://localhost/sanctum/csrf-cookie 我得到以下CSRF cookie。

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

你可以注意到标记末尾奇怪的%3D%3D. 这些字符也被添加到我的laravel_session cookie.当我用这个确切的token在头X-XSRF-TOKEN中发送请求时,我得到了token不匹配的错误。当我删除这些字符时 - 所有工作都正常。我想知道这些字符是从哪里来的,如何才能删除它们。

更新。 因为这些字符是经过编码的URL字符,当我对它们进行解码,并在X-XSRF-TOKEN的末尾加上'=='时,似乎就可以了。不过,奇怪的是,之前我只是手动从查询中删除这些字符,为什么就能正常工作呢?

php laravel csrf laravel-sanctum
1个回答
0
投票

是的, 这代表着 = 符号,它是你的base64'ed CSRF标记的一部分。我猜只有当你删除它时,它才会工作,因为你的 = 符号是特 填充物 字样。在很高的层次上,他们只是把绳子垫出适当的长度。


0
投票

你已经知道了。= 成为 %3D 当它是url编码的时候。

通常情况下,当你遇到一个由大量的数字和字符组成的随机顺序的字符串,并且它以 == 很有可能是base64编码的。

= 被添加到(字符串的末尾)作为填充,以匹配字符串中的特定字符数。你可以在 本回答.

为了回答你的问题,我将尝试解码给定的令牌,有的有,有的没有。== 末了,我会用 该在线解码器所以你也可以在你的终端试试。

有了 ==:

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

没有 ==:

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

他们是 一样.

它之所以有效,是因为它们(=)只是填充物, 并不包含任何信息.

我不是laravel专家, 但是, 我猜测它不能用於 %3D 是因为它没有解码url。

© www.soinside.com 2019 - 2024. All rights reserved.