向@Scripts.Render添加nonce值.使用NWebSec渲染ASP.Net MVC剃刀页面



我正在尝试使用NWebSec NuGet包实现内容安全策略

基本配置级别目前正在工作,但试图为项目中的每个脚本和样式添加nonce。

如何将nonce添加到以下标签中进行内联?

@Styles.Render("~/Content/css/file")

对于BundleConfig,

bundles.Add(new ScriptBundle("~/Content/Scripts").Include(
"~/Content/Scripts/General.js"
));

我尝试了一个新的课程,它很有效,但使用NWebSec包,我一无所获。下面是他们使用@Html.CspScriptNonce((指令的解决方案,这是有效的。

<script @Html.CspScriptNonce()>document.write("Hello world")</script>
<style @Html.CspStyleNonce()>
h1 {
font-size: 10em;
}
</style>

我尝试的解决方案是以以下方式使用@Styles.RenderFormat

@Styles.RenderFormat("<link href="{0}" rel="stylesheet" " + @Html.CspStyleNonce() +"/>","~/Content/css/file")

NWebSec与ASP.Net MCV Bundles一起使用时,不能应用Nonce,但幸运的是,您不需要。

不过,您可能需要在web.config中更改。在nwebsec > httpHeaderSecurityModule > securityHttpHeaders > content-Security-Policy部分中,确保style-srcscript-src均为self="true"。不过,self="true"是默认的,所以如果其他声明不需要这些元素,可以省略它们。

这是web.config中的nwebsec部分。我同时使用样式和脚本捆绑包,并且没有第三方脚本。

<nwebsec>
<httpHeaderSecurityModule xmlns="http://nwebsec.com/HttpHeaderSecurityModuleConfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NWebsecConfig/HttpHeaderSecurityModuleConfig.xsd">
<securityHttpHeaders>
<content-Security-Policy enabled="true">
<default-src self="true" />
<font-src self="true">
<add source="https://fonts.gstatic.com" />
</font-src>
<object-src none="true" />
<style-src self="true">
<add source="https://fonts.googleapis.com" />
</style-src>
<base-uri none="true" />
</content-Security-Policy>
</securityHttpHeaders>
</httpHeaderSecurityModule>
</nwebsec>

最新更新