Javascript CSP:如何调试违规行为:eval:";脚本示例:var KERNEL=…”;
我们有一个web服务,它有一个非常严格的CSP头,阻止Javascript CSP:如何调试违规行为:eval:";脚本示例:var KERNEL=…”;,javascript,debugging,google-chrome-extension,firefox-addon,content-security-policy,Javascript,Debugging,Google Chrome Extension,Firefox Addon,Content Security Policy,我们有一个web服务,它有一个非常严格的CSP头,阻止eval以及其他内容。我们收到许多CSP违规报告,包括以下信息: { "csp-report": { "blocked-uri": "eval", "column-number": 61, "document-uri": "https://example.com/path/to/something"
eval
以及其他内容。我们收到许多CSP违规报告,包括以下信息:
{
"csp-report": {
"blocked-uri": "eval",
"column-number": 61,
"document-uri": "https://example.com/path/to/something",
"line-number": 56,
"original-policy": "default-src 'self'; connect-src 'self' https://www.google-analytics.com; script-src 'self' 'report-sample' https://www.google-analytics.com; sandbox allow-downloads allow-popups allow-scripts allow-same-origin allow-top-navigation allow-forms allow-modals allow-popups-to-escape-sandbox allow-presentation; img-src * data:; style-src * 'unsafe-inline'; font-src * data: about:; media-src *; frame-src * data:; report-uri https://example.com/:reportcspviolation",
"referrer": "",
"script-sample": "var KERNEL = $2C6A44CB_AD42_4731_A544_3F…",
"source-file": "blob:https://example.com/b402b32e-ebf5-4103-b8e8-4cd3c1f56e2a",
"violated-directive": "script-src"
}
}
而文档uri
处的文档没有任何内联JavaScript。而且整个服务源代码不包含大写字母KERNEL
,因此我们的服务无法发出它。documenturi
处的文档也不使用任何
元素,因此任何嵌套文档也不会导致此错误
所有报告似乎都包含完全相同的字母var KERNEL=$2C6A44CB_AD42_4731_A544_3F
(Firefox添加了省略号,Chrome按原样结束了示例)
我从以下UA字符串中看到了类似的CSP报告(按发生频率的顺序排列):
Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:85.0)Gecko/20100101 Firefox/85.0
Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/88.0.4324.104 Safari/537.36
Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/87.0.4280.66 Safari/537.36
Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:84.0)Gecko/20100101 Firefox/84.0
文档uri
所指向的地址来重现错误
在报告的var KERNEL=
错误中,至少95%是由Firefox 85.0发出的
为什么源文件在blob:
方案中?这是通过浏览器扩展运行JavaScript代码的著名黑客吗
我最好的猜测是,这是由一些制作糟糕的浏览器扩展造成的,但有没有办法找出真正的原因?
所有报告似乎都包含完全相同的字母var KERNEL=$2C6A44CB\U AD42\U 4731\U A544\U 3F
这种签名属于病毒及其附属病毒
为什么源文件是blob:scheme?这是通过浏览器扩展运行JavaScript代码的著名黑客吗
我不知道这是否是一个众所周知的黑客行为,但在浏览器行为中观察到一些奇怪的事情。
您的CSP不允许blob:
因此blob:https://example.com/b402b32e-ebf5-4103-b8e8-4cd3c1f56e2a
必须被阻止,我们应该观察被阻止的uri:“blob”
。但是我们看到“blocked uri”:“eval”
,这意味着blob:https://example.com/b402b32e-ebf5-4103-b8e8-4cd3c1f56e2a执行
,第56行的eval被阻塞
注意:上面的浏览器插件脚本eval()
func调用并在代码中使用。
是的,这些应该被您的CSP阻止,但是阻止eval
内部blob
对于CSP来说是无稽之谈,比如脚本src'self'报告示例'https://www.google-analytics.com
+50个好答案!关于“eval”和“blob”的胡说八道,这是一个很好的说法。对于CSP违规报告经常有点不正常,我并不完全感到惊讶,因为这些报告似乎仍然为需要修复的东西提供了指针。如果报告中包含诸如dom-modified by-extension:1
之类的内容(如果正在使用浏览器插件或扩展),那就太好了。我认为隐私可以防止泄露哪个扩展触及了DOM。对于“eval”与“blob”的区别,我只有一个解释——浏览器扩展找到了注入blob:-url
绕过CSP的方法。这并不是一个特殊的浏览器错误,因为Chrome和Firefox的行为类似。非常感谢您与社区分享的非常有趣的观察结果。