启用 CSP(内容安全策略)时,如何在 Laravel 应用程序、刀片页面中允许单个脚本?

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

我运行一个用 Laravel 开发的应用程序。 我需要在 page.blade.php 页面上添加一个脚本。 我在此页面中插入的每个脚本都被开发人员控制台错误阻止:“将资源加载到内联的脚本被页面设置(“script-src”)阻止”

我发现在 main-install-folder/config/app 中的其他 app.php 文件中有以下行:

/*
|--------------------------------------------------------------------------
| By default X-Frame-Options header is enabled and set to SAMEORIGIN.
| Via this option you can disable it (APP_X_FRAME_OPTIONS=false) or set custom value:
| - DENY
| - ALLOW-FROM example.org
|-------------------------------------------------------------------------
*/
'x_frame_options'    => env('APP_X_FRAME_OPTIONS', true),

/*
|--------------------------------------------------------------------------
| Enable Content-Security-Policy meta tag to prevent possible XSS attacks.
|-------------------------------------------------------------------------
*/
'csp_enabled'    => env('APP_CSP_ENABLED', true),
'csp_script_src' => env('APP_CSP_SCRIPT_SRC', ''),

现在,如果我将 csp_enabled 从 true 更改为 false 并清理应用程序缓存,我放入 page.blade.php 中的脚本可以工作,但我想我会创建一个 XSS 弱点。

如何允许我的单个脚本将 csp_enabled 设置为 true?

我尝试过的:

我尝试将以下元标记添加到blade.php页面:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'">

但这没有任何帮助,而且我也不知道使用是否安全。 使用页面中的此元标记并将 csp_enabled 在其他 app.php 文件中设置为 true 时,错误仍然是相同的:脚本不起作用,开发人员控制台显示我之前告诉过的相同错误。

我读到了有关运行脚本 Nonce 的信息,我尝试将 Nonce 添加到脚本中,但我不知道该怎么做。我尝试过的方法没有用。

我阅读了本指南

https://laravel-news.com/laravel-content-security-policies

我尝试更改我的脚本:

<script>

//* script code

</script>

<script nonce="{{ csp_nonce() }}">

//* script code

</script>

但是这段代码会产生 500 错误。另外,如果我尝试输入随机字符串。

下面的文章似乎讨论了我在 Laravel 应用程序上找到的设置,但我没有找到并理解如何解决

https://hummingbirduk.com/managing-a-content-security-policy-with-laravel

我也尝试插入这样的脚本:

<script nonce="1234"></script>

但还是不行。

我能够让脚本工作的唯一方法是将 csp_enabled 设置为 false

我还尝试将脚本代码移动到文件中,然后在 balde 页面中调用,但如果 csp_enabled 设置为 true,错误和结果是相同的

我的期望:

首先保持安全性,因此将 csp_enabled 保持为 true 并允许我添加单个脚本。 我该怎么办?

javascript laravel laravel-5 laravel-blade content-security-policy
1个回答
0
投票

显示错误消息可能有助于了解问题的根本原因。根据您提供的信息,我认为这是一般情况:

启用CSP后,根据第一个代码部分的注释将其添加为元标记。最后一行似乎表明 script-src 为空,这将不允许所有类型的脚本。

然后您尝试在元标记中添加另一个 CSP 策略。现在您有两个策略,并且您的内容需要通过这两个策略。没有任何变化,因为它在启用时仍然需要通过初始策略。

您的下一步应该是删除您添加的元标记并使用其内容来修改 script-src 配置,如下所示:

'csp_script_src' => env('APP_CSP_SCRIPT_SRC', "'self' 'unsafe-inline'"),

如果这有效,您现在可以控制您的策略并可以不断调整它。

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