【发布时间】:2017-08-05 02:43:42
【问题描述】:
我有 ASP.NET Core 应用程序,我正在使用 Telerik 的 UI for ASP.NET Core 框架来处理某些小部件,如 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 的控制台中看到错误
拒绝执行内联脚本,因为它违反了以下内容 内容安全策略指令:“script-src 'self' 'unsafe-eval'”。 'unsafe-inline' 关键字,哈希 ('sha256-oii70XYoqukWS9204nbwatxgYOYcr06+rftc4egdfUk='),或随机数 ('nonce-...') 是启用内联执行所必需的
我在该页面上使用的几个 Kendo 小部件重复此错误。例如日期小部件。在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>
我已经通过 Telerik 对 CSP 的建议 here 和 here。根据建议,我只需添加unsafe-eval 即可让小部件正常工作。然而看起来事实并非如此。我还必须添加unsafe-inline 才能使小部件正常工作。
但启用 CSP 的全部意义在于不允许内联脚本。
问题
有没有办法解决这个问题?
更新 1
小部件仅适用于 IE 11,无需添加 unsafe-inline。在 chrome 和 IE 边缘小部件中需要 unsafe-inline 才能工作。
【问题讨论】:
标签: security kendo-ui kendo-asp.net-mvc content-security-policy