javascript 内容安全策略将脚本标记为由于使用“eval”而被阻止,但脚本仍在加载?

8xiog9wr  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(318)

Chrome(111)、FireFox(111)和MS Edge(111)的行为方式都是一样的。我的(为清晰起见缩写)CSP头包括:

content-security-policy: default-src 'self';script-src 'self' blob: *.usercentrics.eu;connect-src 'self' *.usercentrics.eu;font-src 'self' data: ;img-src 'self' blob: data: *.usercentrics.eu;style-src 'self' 'unsafe-inline' ;frame-src 'self' ;object-src 'none';base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';script-src-attr 'none';upgrade-insecure-requests

当加载页面时,DevTools中的“Issues”选项卡会报告第三方脚本https://app.usercentrics.eu/browser-ui/latest/bundle.js的“Content Security Policy of your site blocks the use of 'eval' in JavaScript”。

然而,当我看网络选项卡时,我看到这个脚本加载并显然运行得很好?!

如果我检查脚本,它确实有一个不安全的 new Function() 字符串表达式。
这让我不禁要问:
1.如果不允许script-src 'unsafe-eval',那么这个被标识为不安全eval的脚本是如何加载的?

  1. CSP头的评估方式是否存在“漏洞”,允许绕过它并恶意插入和运行“eval()”函数?
vngu2lb8

vngu2lb81#

1.浏览器在加载脚本之前无法知道脚本中是否包含违反eval策略的元素。它需要加载并验证脚本。
1.您可以选择将'unsafe-eval'添加到script-src(不推荐),重写违规函数eval/new Function/setInterval/setTimeout(如https://web.dev/csp/#eval_too中所述),或者停止使用/替换违规脚本。

相关问题