ASP.NET WebForms中的内容安全策略

ASP.NET WebForms中的内容安全策略,asp.net,webforms,content-security-policy,Asp.net,Webforms,Content Security Policy,我正在寻找一种很好的方法来为我的ASP.NET WebForms应用程序实现一个相对强大的内容安全策略头。我将尽可能多的JavaScript存储在文件中,而不是内联,但是默认情况下,WebForms为表单提交和基本AJAX调用等简单的事情注入了大量内联脚本 MVC有一些简单的方法来实现nonce,特别是在第三方库(如NWebsec)的帮助下,但我似乎找不到任何用WebForms实现nonce的方法。如果有一种方法可以预测和检索每个.NET注入脚本标记的哈希值,那么使用哈希值就不会有问题 我讨厌允

我正在寻找一种很好的方法来为我的ASP.NET WebForms应用程序实现一个相对强大的
内容安全策略
头。我将尽可能多的JavaScript存储在文件中,而不是内联,但是默认情况下,WebForms为表单提交和基本AJAX调用等简单的事情注入了大量内联脚本

MVC有一些简单的方法来实现nonce,特别是在第三方库(如NWebsec)的帮助下,但我似乎找不到任何用WebForms实现nonce的方法。如果有一种方法可以预测和检索每个.NET注入脚本标记的哈希值,那么使用哈希值就不会有问题


我讨厌允许
'safe-inline'
值。需要关闭如此强大的安全功能是不对的。有没有一种合理的方法在WebForms中实现它?

我也有同样的问题。我很难过地说,这是我们做得最好的一次。我们基本上确定了我们使用什么和不使用什么。我们甚至不得不在一些说明中加入
不安全评估
,因为我们使用的是第三方控件,没有它就无法工作。至少我们避免了对外部URL的调用

默认src'self';
子src“自我”“不安全内联”“不安全评估”;
对象src'none';
脚本src“self”“不安全内联”“不安全评估”https://www.google-analytics.com; 
img src“自我”https://www.google-analytics.com; 
样式src“self”“unsafe inline”

让我们从一个简单的例子开始:


内容安全策略
标头的值由N个段组成,这些段之间用分号分隔。在上面的示例中,我们只指定一个段,即“仅从
'self'
加载资源”<代码>'self'
转换为与HTML资源相同的来源。通过这个最小配置,您的HTML可以从提供HTML引用资源的同一域获取JavaScript、样式表等。您将无法包含来自CDN和类似内容的外部脚本

假设您自己托管所有内容,但希望包含来自cdnjs的jQuery。您需要以下值才能允许浏览器在您的源站之外发出请求:


还记得我说过的片段吗?您可以使用一系列不同的
*-src
键配置要加载不同类型资源的域,如下所示:


此配置允许您的web应用程序从自己的域加载资源,再加上cdnjs.cloudflare.com中的脚本和maxcdn.bootstrapcdn.com中的样式表。

我有相同的答案:如何处理所有这些注入的脚本:

如果在Chrome中打开开发工具,您可能会看到一条消息,如
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script src'self'。“unsafe inline”关键字、哈希('sha256-2NqnatcPqy5jjBXalTpZyJMO/0fUaYUb3ePlviUP4II=')或nonce('nonce-…'))需要启用内联执行。

如果您仔细查看该消息,它会告诉您哈希是什么:
sha256-2NqnatcPqy5jjBXalTpZyJMO/0fUaYUb3ePlviUP4II=

因此,如果您不想使用nonce路由,可以改为使用哈希路由并添加

Content-Security-Policy: script-src 'self' 'sha256-2NqnatcPqy5jjBXalTpZyJMO/0fUaYUb3ePlviUP4II=' 'unsafe-eval';

在某些情况下,您可能还需要添加
不安全评估
,以使其发挥作用。

安迪,您找到过这个问题的答案吗?我没有找到。我甚至试图寻求和的帮助,但都没有用。这个答案没有解决问题的中心论点:ASP.Net将内联脚本注入页面以发挥其魔力。OP已经知道在CSP,他想让平台在没有不安全内联的情况下工作。