我正在使用此方法检测带有eval
的CSP(也用于AngularJS):
function noUnsafeEval() {
try {
new Function('');
return false;
} catch (err) {
return true;
}
}
但是我没有配备CSP的服务器来彻底测试它。
可靠吗?代码中是否存在new Function('')
行会导致无法捕获的错误吗?
什么是err
?在那里发现了哪种错误(Error
,TypeError
等)? CSP错误的消息是什么意思?
我在CSP中找不到有关运行时错误的文档。
答案 0 :(得分:6)
关于如何检测CSP,还有另一个stackoverflow问题:How to detect Content Security Policy (CSP)它还会显示你的函数。
使用它应该是安全的,因为只要代码到达函数构造函数(即它之前没有被其他限制阻塞),你将总是从noUnsafeEval获得一个返回值。
据我所知,如果CSP不允许不安全的eval,它将抛出一个EvalError(mozilla)。但这可能因浏览器而异。
最好的方法是测试这个。您可以使用http://mockbin.org创建一个HTTP端点,该端点返回具有正确CSP标头和您的功能的页面。我在这里制作了这样一个箱子:http://mockbin.org/bin/cc6029e5-8aac-4a54-8fd1-abf41e17042a。如果打开它,打开开发控制台并调试代码,您将看到异常:
您还可以在W3C推荐/草稿中找到此信息:CSP 1.1,CSP 2,CSP 3。在1.1中,您将获得SecurityError而不是EvalError。