我正在使用以下策略实现内容安全策略标头
Content-Security-Policy: default-src 'self'
所以需要避免内联脚本,因为它不会执行.
但是,在MVC应用程序中,某些功能(如编辑器模板)使用内联脚本.例如tinymce_jquery_full.cshtml
包含
$(function() {
$('#@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)').tinymce({
...
.js
使用CSP时,在外部文件中包含动态值的好方法是什么?
我目前的想法是两种方式之一:
类似于JSONP的工作方式,除了在URL中我没有指定回调 - 我只是传递动态值.在每个需要动态JavaScript的文件中,我都包含一个链接,例如
哪些匹配ScriptController
的Foo
返回类型的内容的动作text/javascript
将所述动态值bar
.这对我来说是一种可靠的方式,如果有点笨拙,它首先会破坏使用CSP的一些优点(几乎很容易意外地插入未编码的文本并导致XSS,因为它没有CSP).
动态值将插入页面中:
并在外部JavaScript文件中查找这些值:
$('#url').val();
这将有效,但如果页面上有多个动态控件或者有多个相同类型的控件,则可能会很麻烦.问题是如何有效地将每个.js
脚本与其隐藏字段匹配.
有没有更好的解决方案,还是有任何我可以使用的现成框架?