php 将spatie/laravel-csp与Laravel和vite.js一起使用时,Nonce始终为空

fjaof16o  于 2023-01-16  发布在  PHP
关注(0)|答案(1)|浏览(150)

我遇到了一个问题,在vite和laravel framework(9.44)中使用spatie/laravel-csp(v2.8.2)时,“nonce”值总是空的。我按照github页面上的说明进行了操作。以下是我的配置:
app/http/Kernel.php

protected $middlewareGroups = [
        'web' => [
            ...
            \Spatie\Csp\AddCspHeaders::class
        ],

config/csp.php

'nonce_generator' => App\Support\LaravelViteNonceGenerator::class,

used策略使用spatie的basic policy中的nonce指令。
LaravelViteNonceGenerator.php

namespace App\Support;

use Illuminate\Support\Str;
use Illuminate\Support\Facades\Vite;
use Spatie\Csp\Nonce\NonceGenerator;

class LaravelViteNonceGenerator implements NonceGenerator
{
    public function generate(): string
    {
        return Vite::useCspNonce();
    }
}

在我的脑海中

@viteReactRefresh
    @vite('resources/js/app.jsx')

当我使用@nonce指令时,nonce具有与页面上Content-Security-Policy头中所示相同的随机字符串值,但脚本标记没有将其作为属性获取。
更多信息:vite:3.2.4@vitejs/插入React:2.2.0拉腊维尔-维特-插件:0.6.1
我做错了什么?

zd287kbt

zd287kbt1#

为了防止其他人也在寻找这个问题,我找到了一个解决方案。缺少的键是csp_nonce()指令。所以我用csp_nonce()指令创建了一个 meta标记,如下所示:

<meta property="csp-nonce" content="{{ csp_nonce() }}">

之后,我的vite注入的JS和CSS文件获得了nonce属性,浏览器不再阻止内容。

相关问题