Laravel DecryptException - 有效负载无效

2022-08-31 00:45:07

我正在将AJAX帖子请求发送回我的Laravel API并收到以下错误混乱:

解密编译.php行 13235 中的异常:有效负载无效。

我正在从cookie中读取XSRF-TOKEN,并将其作为名为X-XSRF-TOKEN的请求标头发送。

该网站是一个与Laravel API完全独立的网站,但共享相同的会话,这就是为什么我从cookie中获取价值的原因。

奇怪的是,它偶尔会起作用。任何想法是什么导致这种情况?


答案 1

如果您从 JavaScript 发送,则可以使用 对其进行解码。它将转换为 .X-XSRF-TOKENdecodeURIComponent()%3D=


答案 2

我找出了问题的原因。XSRF-TOKEN Cookie 值有时会在末尾附加一个流氓字符:“%3D” - 有时末尾有两个。不知道他们是如何到达那里的,但是当他们存在时,验证失败。

如果你base64_decode cookie值,你会得到一个json字符串,其中末尾附加了流氓字符:“7”,因此Laravel的解密方法失败。

我最终不得不编写自己的CSRF验证函数:

$payload = base64_decode($request->header('X-XSRF-TOKEN'));

            //Remove any rogue chars from the end of the json  
            for($i=0; $i<strlen($payload); $i++){
                $lastChar = substr($payload, -1);
                if($lastChar != '}'){
                    $payload = substr($payload, 0, -1);
                } else {
                    break;
                }
            }

            //Needs to be base64 encoded when passed to decrypt
            $payload = base64_encode($payload);

            $headerToken = decrypt($payload);
            $cookieToken = $request->cookie('XSRF-TOKEN');

            //Compare tokens
            if($headerToken == $cookieToken){
                return true;
            } else {
                return false;
            }

推荐