我们使用以下CSP标头:
default-src 'self' *.ourdomain.com; script-src 'self' *.ourdomain.com 'sha256-[...]' 'unsafe-eval';
connect-src 'self' *.ourdomain.com;
style-src 'unsafe-inline' * 'self' data:; font-src *;
img-src * 'self' data:
我们的安全团队的建议不是使用unsafe-eval。
我的问题是:只要我们使用 sha256 - [...] 限制我们自己尚未部署的任何脚本,仍然存在的安全风险是什么? CSP标题中的strong> unsafe-eval ?在什么情况下,这仍然会让我们受到跨站点攻击?
答案 0 :(得分:18)
因为eval确实不安全。每种语言中的Eval表示“接受此字符串并执行代码”。当然,您可能以半安全的方式使用eval,但只要您允许它,您就会说“任何人都可以在给定入口点的应用程序中执行任意代码”。
我的意见没有理由使用eval。在实际有用的代码中向我展示eval required 的情况,我敢打赌,我可以在不使用eval的情况下重写代码或将其声明为不可靠的安全代码。
禁止内联脚本只有一半的战斗,特别是如果你使用jquery。
测验:此代码是否会触发内联脚本违规或eval违规?
$('body').html('<script>alert(1)</script>')
你可能会感到惊讶。
剧透:
它是eval
答案 1 :(得分:4)
安全风险在于,它不会保护您自己的任何可能易受攻击的代码,因为使用了eval
。
如果您在自己的代码中使用eval
,则应该质疑原因。是否有更安全的替代品可以替代使用?
See here表示攻击者如何注入代码的(人为的)示例。当然,这是否可以在您的网站上完成取决于您的代码。
结果是,使用eval
几乎总是替代。