为什么内联脚本被禁止(内容安全策略)?

时间:2013-04-03 07:06:03

标签: javascript inline content-security-policy

我想知道规范的引用: (https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html

  

为了获得最大的好处,作者需要将所有内联脚本和样式移动到外部,例如外部脚本,因为用户代理无法确定攻击者是否注入了内联脚本。

采购所有内联脚本是一项耗时的任务。

我的问题是从安全的角度来看。通过将所有内联脚本(例如JavaScript)提取到外部源来真正获得任何安全性好处吗?

谢谢

1 个答案:

答案 0 :(得分:6)

关键部分是

  

用户代理无法确定攻击者是否注入了内联脚本。

为了提供保护,CSP必须防止攻击者控制的子字符串导致代码运行。由于用户代理不知道HTML的哪些部分是由不受信任的输入指定的,哪些部分来自受信任的开发人员编写的模板,因此必须假设最坏的情况 - 任何属性或元素都可以由攻击者控制。

  

通过将所有内联脚本(例如JavaScript)提取到外部源,您真的可以获得任何安全性好处吗?

没有。提取要运行的脚本不会带来任何安全性好处,它只允许您在使用CSP时运行所需的脚本。

安全优势来自于能够调用浏览器的HTML解析器而不会无意中执行滥用域权限或窃取机密的脚本。