我正在使用以下策略实现内容安全策略标头
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脚本与其隐藏字段匹配.
有没有更好的解决方案,还是有任何我可以使用的现成框架?
我希望能够允许社区成员提供他们自己的javascript代码供其他人使用,因为用户的想象力远远超过我能想到的任何东西.
但这提出了安全性的固有问题,特别是当目的是允许外部代码运行时.
那么,我可以禁止eval()提交并完成它吗?或者还有其他方法来评估代码或导致javascript中的大规模恐慌?
还有其他事情要禁止,但我主要担心的是,除非我能阻止执行字符串,否则我可以规避任何其他过滤器以用于特定方法.可行,或者我是否必须诉诸要求作者提供Web服务界面?
我正在尝试创建一个内部有 JS 火的 iframe,但无法访问父文档。目标是有一个简单的实现并且不包含任何特殊的库。我发现HTML5 Sandbox属性是一个可行的解决方案;然而,事实证明,同时沙箱 iframe并将JS 放入其中是相当困难的。
我努力了:
srcdoc属性设置 HTML(例如<iframe sandbox="allow-scripts" srcdoc="<body><script src='sample1.js'></script><script src='sample2.js'></script></body>"></iframe>),根据此处,这在 IE 中不起作用src属性设置 HTML(例如<iframe sandbox="allow-scripts" src="javascript:"<html><body><script src='sample1.js'></script><script src='sample2.js'></script></body></html>""></iframe)这在 Firefox 38.0.5 (Mac OS X Yosemite) 中不起作用,但在 Chrome 43 和 Safari 8.0.4 中起作用......“在 Firefox 中不起作用”意味着它确实会允许sample2.js添加<span></span>到iframe DOM,但它不设置span的innerText;因此,它不能按预期工作。我在应用程序中动态创建一个iframe,结果如下所示:
<iframe src="blob:http%3A//localhost%3A9292/0194dfed-6255-4029-a767-c60156f3d359"
scrolling="no" sandbox="allow-scripts allow-popups allow-same-origin"
name="sandbox" style="width: 100%; height: 100%; border: 0px;"></iframe>
Run Code Online (Sandbox Code Playgroud)
具有这样的沙盒配置是否安全(特别是允许将iframe内容视为来自同一来源)?