首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NWebSec非MVC WebForms ASPX .Net 4.6.1 C# -配置不工作

NWebSec非MVC WebForms ASPX .Net 4.6.1 C# -配置不工作
EN

Stack Overflow用户
提问于 2021-01-05 16:59:38
回答 1查看 844关注 0票数 0

我需要支持一个运行在Asp.net、C#和.NET 4.6.1上的旧网站。安全审计已经通知我们,我们需要执行内容安全策略。我搜索了谷歌,但没有找到具体的答案,如果在NWebSec中支持webforms (而不是MVC)。https://docs.nwebsec.com/en/latest/确实提到了对Asp.net 4的支持如下:

代码语言:javascript
复制
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的支持,我遵循了以下步骤:

  1. 在VS 2017年使用Asp.net 4.6.1创建了一个新的.net webforms项目。测试了它是否有效。
  2. 添加了一个指定的NuGet包- https://www.nuget.org/packages/NWebsec/:Install -Version 6.0.0
  3. 将Web.config文件更改为包括以下内容:
代码语言:javascript
复制
<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页面

代码语言:javascript
复制
<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 .”的散列关键字。任何帮助/指针/支持都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-01-07 08:44:07

<script type="text/javascript"> ... </script>是一个内联脚本,因此您可以选择在CSP中允许它:

  1. 'unsafe-inline'令牌添加到script-src<add source="'unsafe-inline'" />中 是的,这是不安全的,降低了CSP的有效性
  2. 将三个'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=' />
  3. 使用“现在--价值” (它不适合像SPA这样的客户端呈现应用程序,因为您不能在每次加载页面时生成一个新的当前版本): <script type="text/javascript" nonce="server_generated_base64_value"> ... /script>
  4. 将内联<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阻塞。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65583306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档