我正在尝试使用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-src
和script-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>