内容安全策略(CSP) - 安全使用unsafe-eval?

时间:2016-05-11 06:59:25

标签: content-security-policy

我们使用以下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 ?在什么情况下,这仍然会让我们受到跨站点攻击?

2 个答案:

答案 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几乎总是替代。