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