.net core 获得;拒绝应用内联样式,因为它违反了以下内容安全策略;错误

.net core 获得;拒绝应用内联样式,因为它违反了以下内容安全策略;错误,.net-core,.net Core,我在运行应用程序时遇到以下错误 拒绝应用内联样式,因为它违反了以下内容安全策略指令:“样式src'self”“sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=”“sha256-5uIP+HBVRu0WW8ep6d6+YVfhgkl0AcIabZrBS5JJAzs=”。启用内联执行需要'unsafe inline'关键字、哈希('sha256-4Su6mBWzEIFnH4pAGMOuaeBrstwJN4Z3pq/s1Kn4/KQ=')或nonc

我在运行应用程序时遇到以下错误

拒绝应用内联样式,因为它违反了以下内容安全策略指令:“样式src'self”“sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=”“sha256-5uIP+HBVRu0WW8ep6d6+YVfhgkl0AcIabZrBS5JJAzs=”。启用内联执行需要'unsafe inline'关键字、哈希('sha256-4Su6mBWzEIFnH4pAGMOuaeBrstwJN4Z3pq/s1Kn4/KQ=')或nonce('nonce-…')

下面是我目前使用的代码

const string modernizrHash1 = "sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=";
            const string modernizrHash2 = "sha256-5uIP+HBVRu0WW8ep6d6+YVfhgkl0AcIabZrBS5JJAzs=";
            app.UseCsp(options => options
                .DefaultSources(s => s.Self())
                .ScriptSources(s => s.Self().CustomSources("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/"))
                .StyleSources(s => s.Self().CustomSources("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/", modernizrHash1, modernizrHash2))
                .FontSources(s => s.Self().CustomSources("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/"))
                .ImageSources(s => s.Self().CustomSources("data:"))
            );

出现此错误是因为根据您的内容安全策略和返回的错误,不允许使用内联样式(可以散列到sha256-4Su6mBWzEIFnH4pAGMOuaeBrstwJN4Z3pq/s1Kn4/KQ=)

我建议采取两种可能的步骤:

  • 远离内联样式(因为它们可能不安全),并要求您在每次内联样式更改时更改CSP
  • 将提供的SHA添加到CSP的样式源中。但请注意,必须为应用程序中所有页面中添加的每个内联样式维护和更新此功能
根据以下评论更新答案

注意:当我在IE浏览器中运行它时,没有问题,只有在chrome和firefox中我才遇到问题

看一看,IE仅部分支持内容安全策略,这可以解释为什么您在控制台中没有看到这个错误。i、 e.Internet Explorer不支持CSP,因此不应用它


我已经通过更改浏览器控制台错误中显示的哈希键解决了这个问题,我用代码哈希键替换了控制台错误哈希键,但不确定这是否是永久解决方案

这并不是一个永久的解决办法。如果(以及当)内联样式发生更改,则必须更改CSP中的哈希,以便再次应用样式

这让我想到:

你能告诉我哈希键是如何生成的,以及我如何永久地修复这个问题吗

查看原始问题中的代码:

const string modernizerhash1=“sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=”;
const string modernizerhash2=“sha256-5uIP+HBVRu0WW8ep6d6+YVfhgkl0AcIabZrBS5JJAzs=”;
//其他事情
.StyleSources(s=>s.Self().CustomSources(“https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/“,现代化(1,现代化(2))
您正在告诉浏览器(通过您正在生成的内容安全策略)仅允许从以下位置加载样式:

  • self(站点的源域)
以及与以下哈希匹配的值:

  • sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
  • sha256-5uIP+HBVRu0WW8ep6d6+YVfhgkl0AcIabZrBS5JJAzs=
您提到您还包括哈希:

  • sha256-4Su6mBWzEIFnH4pAGMOuaeBrstwJN4Z3pq/s1Kn4/KQ=
当浏览器开始呈现页面时,它将查看页面呈现所需的资源,并将其与内容安全策略中的列表进行比较。如果资源(内联样式和内联javascript被归类为资源)不在列表中,那么浏览器将对资源的内容进行简单分析,并将其与CSP中列出的任何哈希进行比较

注意:同样的事情也可以通过使用

如果资源不是来自允许的源,或者它的哈希与CSP中列出的哈希不匹配,那么浏览器将主动拒绝它

由于SHA-2算法使用资源的内容生成哈希,因此当其内容更改时,哈希的计算值将不同

例如,此处的内联样式:

你好,世界

可能散列到F1FF77E5DDBB1AF52EB51C98F725927143221549385937595112128987CF39E4(这是“颜色:红色”的散列)

鉴于以下内联样式:

你好,世界

may必须是2F262B22412B633D12B27FA9F94A3B0495821CB8341CFF0A88C80E3FED5DC9E8(这是“颜色:绿色”的散列)

正如您所看到的,散列样式之间存在巨大差异。这是通过设计(在算法中)

为了解决这个问题,我将把内联样式替换为描述页面内容样式的css文件。只要css文件与HTML来自同一来源,则
self
规则将涵盖它


CSP是一个非常复杂的话题(但一旦你学会了基本知识,就很容易掌握)。我建议您查看,以了解有关其工作原理以及如何使用它来保护web应用程序的更多信息。

您会遇到此错误,因为不允许使用内联样式(可以散列到sha256-4Su6mBWzEIFnH4pAGMOuaeBrstwJN4Z3pq/s1Kn4/KQ=),根据您的内容安全策略和返回的错误

我建议采取两种可能的步骤:

  • 远离内联样式(因为它们可能不安全),并要求您在每次内联样式更改时更改CSP
  • 将提供的SHA添加到CSP的样式源中。但请注意,必须为应用程序中所有页面中添加的每个内联样式维护和更新此功能
根据以下评论更新答案

注意:当我在IE浏览器中运行它时,没有问题,只有在chrome和firefox中我才遇到问题

看一看,IE仅部分支持内容安全策略,这可以解释为什么您在控制台中没有看到这个错误。i、 e.Internet Explorer不支持CSP,因此它不支持CSP