内容安全策略 (CSP) - unsafe-eval 的安全使用?
Content Security Policy (CSP) - safe usage of unsafe-eval?
我们使用以下 CSP header:
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 header 中保留 unsafe-eval?在什么情况下这仍然会使我们面临 cross-site 攻击?
因为 eval 实际上是不安全的。 Eval 在每种语言中的意思是“获取这个字符串并执行它的代码”。当然,您可能以半安全的方式使用 eval,但只要您完全允许,您就是在说“任何人都可以在我的应用程序中执行任意代码给定入口点”。
我的意见没有理由使用 eval。向我展示在实际有用的代码中 需要 eval 的情况,我敢打赌我可以在不使用 eval 的情况下重写代码或将其声明为不可能安全的代码。
禁止内联脚本只是成功的一半,特别是如果您使用 jquery。
测验:此代码会触发内联脚本违规还是 eval 违规?
$('body').html('<script>alert(1)</script>')
你可能会感到惊讶。
剧透:
它是 eval(在撰写本文时)
安全风险在于它不保护您自己的任何可能易受攻击的代码,因为使用了 eval
。
如果您在自己的代码中使用 eval
,您应该质疑为什么。有没有更安全的替代方案可以代替?
See here 有关攻击者如何注入代码的(人为的)示例。当然,这是否可以对您的网站完成很大程度上取决于您的代码。
结果是几乎总有一种替代方法可以使用 eval
。
我们使用以下 CSP header:
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 header 中保留 unsafe-eval?在什么情况下这仍然会使我们面临 cross-site 攻击?
因为 eval 实际上是不安全的。 Eval 在每种语言中的意思是“获取这个字符串并执行它的代码”。当然,您可能以半安全的方式使用 eval,但只要您完全允许,您就是在说“任何人都可以在我的应用程序中执行任意代码给定入口点”。
我的意见没有理由使用 eval。向我展示在实际有用的代码中 需要 eval 的情况,我敢打赌我可以在不使用 eval 的情况下重写代码或将其声明为不可能安全的代码。
禁止内联脚本只是成功的一半,特别是如果您使用 jquery。
测验:此代码会触发内联脚本违规还是 eval 违规?
$('body').html('<script>alert(1)</script>')
你可能会感到惊讶。
剧透:
它是 eval(在撰写本文时)
安全风险在于它不保护您自己的任何可能易受攻击的代码,因为使用了 eval
。
如果您在自己的代码中使用 eval
,您应该质疑为什么。有没有更安全的替代方案可以代替?
See here 有关攻击者如何注入代码的(人为的)示例。当然,这是否可以对您的网站完成很大程度上取决于您的代码。
结果是几乎总有一种替代方法可以使用 eval
。