为laravel官方包启用nonce

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

我目前正在开发一个使用 Telescope、Horizon 和 Socialite 的 Laravel 项目。我已经实施了严格的内容安全策略 (CSP),不允许内联脚本,并且我想通过向它们生成的任何内联脚本添加随机数来保护这些包。

问题: 它仍然显示“拒绝应用内联样式,因为它违反了以下内容安全策略指令”。我什至尝试静态地将随机数设置为“私有随机数”,但它仍然被阻止

环境: Laravel 版本:10.x 套装:望远镜、地平线、社交名流 CSP 实现:CSP 标头的自定义中间件

我尝试过的: 在刀片模板中添加随机数:

我通过在中间件中生成随机数并将其传递给视图,将随机数添加到 Blade 模板中我自己的内联脚本和样式中。

$nonce = base64_encode(random_bytes(16));
View::share('cspNonce', $nonce);

然后,我将文件从供应商复制到我的资源文件夹,然后我在模板中使用了随机数,如下所示: 刀片

<link 
    nonce="{{ $cspNonce }}"
    href="{{ asset(mix($cssFile, 'vendor/telescope')) }}" rel="stylesheet" type="text/css">
// some html code
<script nonce="{{ $cspNonce }}">
     window.Telescope = @json($telescopeScriptVariables);
</script>

在 CSP 标头中应用 Nonce:

我的 CSP 标头包含随机数:

$csp = "default-src 'self'; script-src 'self' 'nonce-$nonce';";

我在这里呆了两天,任何有关如何实现这一目标的指导或示例将不胜感激!

laravel content-security-policy laravel-socialite laravel-horizon laravel-telescope
1个回答
0
投票

您需要采取的第一步是查看您的中间件代码。在句柄函数中设置随机数并使用标头传递它。

出于短期调试目的,您可以在中间件的 set headers 方法中使用 unsafe-inline 参数。

此外您可以尝试使用第三方 laravel-csp 包

您可以使用以下方式安装它

composer require spatie/laravel-csp

有关更多详细信息,请参阅文档。 https://github.com/spatie/laravel-csp

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.