我需要支持一个运行在Asp.net、C#和.NET 4.6.1上的旧网站。安全审计已经通知我们,我们需要执行内容安全策略。我搜索了谷歌,但没有找到具体的答案,如果在NWebSec中支持webforms (而不是MVC)。https://docs.nwebsec.com/en/latest/确实提到了对Asp.net 4的支持如下:
NWebsec for ASP.NET 4
Historically, NWebsec has been targeting ASP.NET 4. The following packages target ASP.NET 4:
NWebsec
NWebsec.Mvc
NWebsec.Owin为了测试NWebSec对asp.net webforms的支持,我遵循了以下步骤:
<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"/>
<script-src self="true" enabled="true">
<add source="maxcdn.bootstrapcdn.com" />
<add source="code.jquery.com" />
<add source="ajax.googleapis.com" />
<!--<add source ="localhost:60252"/>-->
</script-src>
<style-src self="true" />
<report-uri enableBuiltinHandler="true"/>
</content-Security-Policy>
</securityHttpHeaders>
</httpHeaderSecurityModule>
</nwebsec>4.保存并运行项目。
5.我在Google控制台中发现了以下错误
“现代化-2.8.3.js:134拒绝应用内联样式,因为它违反了以下内容安全策略指令:" style -src 'self'”。要么是‘不安全-内联’关键字,要么是散列('sha256-CwE3Bg0VYQOIdNAkbB/Btdkhul49qZuwgNCMPgNY5zw='),,要么是“不安全-.”)需要启用内联执行。
localhost/:20拒绝执行内联脚本,因为它违反了以下内容安全策略指令:" script -src 'self‘maxcdn.bootstrapcdn.com code.jquery.com ajax.googleapis.com“。要么是‘不安全-内联’关键字,要么是散列('sha256-uYoAmCrBFM4tx/Ww+6eFuIJxuwZ3YFRT7fWUTlgnPuE='),,要么是“不安全-.”)是启用内联执行所必需的。
localhost/:39拒绝执行内联脚本,因为它违反了以下内容安全策略指令:" script -src 'self‘maxcdn.bootstrapcdn.com code.jquery.com ajax.googleapis.com“。要么是‘不安全-内联’关键字,要么是散列('sha256-2vr5KMButMK7a+bOf/ned/cPnF2yNooMulXA8E65wGw='),,要么是“不安全-.”)需要启用内联执行。
localhost/:52拒绝执行内联脚本,因为它违反了以下内容安全策略指令:" script -src 'self‘maxcdn.bootstrapcdn.com code.jquery.com ajax.googleapis.com“。要么是‘不安全-内联’关键字,要么是散列('sha256-AJipRK0+ga273yKzZZX3BqTHwvwc1v3R9erdu31Wh6I='),,要么是“不安全-.”)需要启用内联执行。
例如,单击Console中粗体的错误将导致下面的JavaScript块,该块由Asp.net框架注入到aspx页面
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['ctl01'];
if (!theForm) {
theForm = document.ctl01;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>我希望看到这些Google控制台错误消失,但是,我不希望允许‘不安全-内联’关键字,或者使用散列('sha256-uYoAmCrBFM4tx/Ww+6eFuIJxuwZ3YFRT7fWUTlgnPuE='),或一个名为“nonce .”的散列关键字。任何帮助/指针/支持都将不胜感激。
发布于 2021-01-07 08:44:07
<script type="text/javascript"> ... </script>是一个内联脚本,因此您可以选择在CSP中允许它:
'unsafe-inline'令牌添加到script-src<add source="'unsafe-inline'" />中
是的,这是不安全的,降低了CSP的有效性'hash-sources'添加到script-src中,因为您有3个内联脚本(这适用于<script>内联块,但在<tag onclick='...'或<a href='javascript:...'内联脚本的情况下失败):
<add source="'sha256-AJipRK0+ga273yKzZZX3BqTHwvwc1v3R9erdu31Wh6I=' />
<add source="'sha256-2vr5KMButMK7a+bOf/ned/cPnF2yNooMulXA8E65wGw=' />
<add source="'sha256-uYoAmCrBFM4tx/Ww+6eFuIJxuwZ3YFRT7fWUTlgnPuE=' /><script type="text/javascript" nonce="server_generated_base64_value"> ... /script><script>的内容移动到外部文件,并允许使用'self'。
而不是内联<tag onclick='..'>,您可以使用addEventListener()。
而不是内联<a href='javascript:...'>,您可以使用<a href='#'>。此外,您还有与上面相同的内容,但对于内联<style>或<tag style='...':现代化-2.8.3.js:134拒绝应用内联样式,因为它违反了以下内容安全策略指令:"style-src 'self'“
因此,您有与上面相同的选项,但对于style-src指令:
<add source="'sha256-CwE3Bg0VYQOIdNAkbB/Btdkhul49qZuwgNCMPgNY5zw=' />
这在内联<style>的情况下有效,但在<tag style='...'中失败。
PS:如你所见,有3种“内联脚本”和2种“内联样式”。在修改CSP规则之前,您需要知道其中哪些是使用的。JS调用setAttribute('style', ...)也被计算为内联样式的,并将被CSP阻塞。
https://stackoverflow.com/questions/65583306
复制相似问题