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