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

And*_*ndy 17 asp.net webforms content-security-policy

我正在寻找一种为ASP.NET WebForms应用程序实现相对强大的Content-Security-Policy标头的好方法.我将尽可能多的JavaScript存储在文件而不是内联中,但默认情况下,WebForms会为表单提交和基本AJAX调用等简单注入大量内联脚本.

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

我讨厌允许'不安全内联'的价值.需要关闭这样一个强大的安全功能是不对的.有没有合理的方法在WebForms中实现它?

cod*_*key 8

我在这里写了一个关于如何处理所有这些注入脚本的答案:

如果您在 Chrome 中打开开发工具,您可能会看到类似这样的消息

拒绝执行内联脚本,因为它违反了以下内容安全策略指令:"script-src 'self'。需要关键字'unsafe-inline'、哈希 ( 'sha256-2NqnatcPqy5jjBXalTpZyJMO/0fUaYUb3ePlviUP4II=') 或随机数 ( 'nonce-...') 才能启用内联执行。

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

因此,如果您不想采用随机数路线,则可以采用哈希路线并添加

Content-Security-Policy: script-src 'self' 'sha256-2NqnatcPqy5jjBXalTpZyJMO/0fUaYUb3ePlviUP4II=' 'unsafe-eval';
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您可能还需要添加unsafe-eval才能使其发挥作用。


Mic*_*han 6

我有同样的问题。我很伤心地说,这是我们做的最好。我们基本上确定了我们使用和不使用的内容。我们甚至不得不unsafe-eval输入一些说明,因为我们使用了没有它就无法工作的第三方控件。至少我们避免调用外部网址。

default-src 'self'; 
child-src 'self' 'unsafe-inline' 'unsafe-eval'; 
object-src 'none'; 
script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.google-analytics.com; 
img-src 'self' https://www.google-analytics.com; 
style-src 'self' 'unsafe-inline'
Run Code Online (Sandbox Code Playgroud)