捕获内容安全策略(CSP)错误

时间:2017-02-25 15:55:38

标签: javascript content-security-policy

我正在使用此方法检测带有eval的CSP(也用于AngularJS):

  function noUnsafeEval() {
    try {
      new Function('');
      return false;
    } catch (err) {
      return true;
    }
  }

但是我没有配备CSP的服务器来彻底测试它。

可靠吗?代码中是否存在new Function('')行会导致无法捕获的错误吗?

什么是err?在那里发现了哪种错误(ErrorTypeError等)? CSP错误的消息是什么意思?

我在CSP中找不到有关运行时错误的文档。

1 个答案:

答案 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。如果打开它,打开开发控制台并调试代码,您将看到异常:

CSP Test

稍后编辑

您还可以在W3C推荐/草稿中找到此信息:CSP 1.1CSP 2CSP 3。在1.1中,您将获得SecurityError而不是EvalError。