Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 启用CSP时,剑道小部件不工作_Security_Kendo Ui_Kendo Asp.net Mvc_Content Security Policy - Fatal编程技术网

Security 启用CSP时,剑道小部件不工作

Security 启用CSP时,剑道小部件不工作,security,kendo-ui,kendo-asp.net-mvc,content-security-policy,Security,Kendo Ui,Kendo Asp.net Mvc,Content Security Policy,我有ASP.NET核心应用程序,我正在使用Telerik的UI for ASP.NET核心框架,用于某些小部件,如Date、DropDownList、Charts等 应用程序正在从自己的服务器加载所有Javascript、图像和css。因此,我已启用CSP策略,如下所示 script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self

我有ASP.NET核心应用程序,我正在使用Telerik的UI for ASP.NET核心框架,用于某些小部件,如Date、DropDownList、Charts等

应用程序正在从自己的服务器加载所有Javascript、图像和css。因此,我已启用CSP策略,如下所示

script-src 'self' 'unsafe-eval';   
style-src 'self' 'unsafe-inline';    
img-src 'self' data:;    
font-src 'self';    
media-src 'none';    
object-src 'none';   
child-src https://xxxx.yyyy.com;   
report-uri http://myapplication/csp/report;
然而,当页面加载时,我在chrome的控制台中看到错误

拒绝执行内联脚本,因为它违反以下条件 内容安全策略指令:“脚本src‘self’‘safe eval’”。 “不安全内联”关键字或哈希 ('sha256-oii70XYoqukWS9204nbwatxgYOYcr06+rftc4egdfUk=')或一个nonce 启用内联执行需要('nonce-…')

我在那个页面上使用的几个剑道小部件重复了这个错误。例如日期小部件。在cshtml中,我将日期配置如下

@(Html.Kendo().DatePicker()
.Name("sbDate")
.HtmlAttributes(new { @class = "mydate" }))
在html中呈现为

<input class="mydate" id="sbDate" name="sbDate" type="date" value="" /><script>jQuery(function(){jQuery("#sbDate").kendoDatePicker({"format":"M/d/yyyy","footer":false});});</script>
jQuery(function(){jQuery(#sbDate”).kendoDatePicker({“格式”:“M/d/yyyy”,“footer:false});});
我已经通过了Telerik的建议和CSP。根据建议,我只需添加
safe eval
即可让小部件正常工作。然而,看起来这不是真的。我还必须添加
不安全的内联
,以使小部件正常工作

但启用CSP的关键是不允许内联脚本

问题
有没有办法解决这个问题

更新1

小部件只在IE 11中工作,不添加
不安全的内联
。在chrome和IE中,边缘小部件需要
不安全的内联
才能工作

我不能确定这是否能解决您的问题,但在我们的应用程序中,我们正在使用该功能,但还有其他原因。我们的原因是我们在页面末尾加载所有脚本(尤其是
jquery.js
)。但其副作用是不再将
jQuery
脚本调用呈现到页面中。通过执行
@Html.Kendo().DeferredScripts()
,您可以控制生成所有脚本的位置(但您将在上面的文档中找到更多帮助)。无论如何,可能在CSP的上下文中,即使页面最后的
块仍然被认为是“内联的”。但是试试看。

下面的解决方案可能有效(我还没有尝试过)

1> 为每个剑道小部件添加
Deferred
方法。像

    @(Html.Kendo().DatePicker().Name("BeginDate").Deferred())
2> 在每个使用剑道控制的视图中,在底部添加脚本标记

  <script asp-add-nonce="true">
      @Html.Kendo().DeferredScripts(false)
  </script>

@Html.Kendo().DeferredScripts(false)
请注意,
asp add nonce
不是asp.core的现成版本。您必须安装nuget库。我从作者那里了解到,它展示了如何为.net核心应用程序配置CSP,以及如何为每个请求生成新的nonce

3> 不要在web.config中配置CSP策略,因为每个请求都需要不同的nonce值,而是使用本文中提到的中间件配置CSP策略


4> 我认为,如果我们使用随机
nonce
(除非您针对的是较旧的浏览器),就不需要添加
不安全的内联

谢谢。我发现这里的帖子甚至都不一样,因为脚本保存在视图中。但是,我们可以在脚本标记内同时使用不同的脚本,并且可以在CSP的脚本标记上使用
nonce