ContentSecurityPolicyViolation

ContentSecurityPolicyViolation

我正在尝试使用 Lift 3 和 lift-ng (Angular) 实现一个基本的聊天应用程序。大多数情况下,这是有效的。但是,我在(服务器端)日志中收到此警告:

[qtp1721931908-24] WARN net.liftweb.http.ContentSecurityPolicyViolation - Got a content security violation report we couldn't interpret: 'Full({"csp-report":{"document-uri":"http://localhost:8081/","referrer":"","violated-directive":"script-src 'unsafe-eval' 'self'","effective-directive":"script-src","original-policy":"default-src 'self'; img-src *; script-src 'unsafe-eval' 'self'; style-src 'self' 'unsafe-inline'; report-uri /lift/content-security-policy-report","blocked-uri":"inline","status-code":200}})'.

我想知道的是如何追踪导致违规的原因?我很不清楚代码或绑定的哪一部分可能会浮出水面,或者如何缩小范围而不必煞费苦心地注释掉代码库的每个部分。

我可以通过在我的 Boot.scala 中设置此 SecurityRule 轻松摆脱违规:

LiftRules.securityRules = () => {
  SecurityRules(content = Some(ContentSecurityPolicy(
    scriptSources = List(ContentSourceRestriction.Self,
      ContentSourceRestriction.UnsafeInline,
      ContentSourceRestriction.UnsafeEval)
  )))
}

但是,我想避免使用不安全的 inlining/eval。

如果您查看浏览器的开发人员控制台,它可能包含内联代码的 link。例如

当我点击 "hash:2:0" 时,它把我带到了页面的 html 来源,第 2 行,字符 0,这正是有问题的代码所在的位置:

需要注意的一件事是很多插件(例如 lastpass)都会生成此警报。请务必在测试时禁用所有插件。