Laravel DecryptException - 有效负载无效

eze*_*ero 4 php api cookies laravel

我发送一个AJAX帖子请求回到我的Laravel API并收到此错误消息:

compile.php第13235行中的DecryptException:有效负载无效.

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

该站点是Laravel API中完全独立的站点,但共享相同的会话,这就是我从cookie获取值的原因.

奇怪的是,它偶尔会起作用.是什么原因引起了这个?

eze*_*ero 7

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

如果您对 cookie 值进行 base64_decode,您会得到一个 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;
            }
Run Code Online (Sandbox Code Playgroud)


Vno*_*mar 7

如果您是X-XSRF-TOKEN从JavaScript 发送的,则可以使用它进行解码decodeURIComponent().它转换%3D=.