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

Why is inline script forbidden (Content Security Policy)?

本文关键字:安全策略 脚本 为什么 禁止      更新时间:2023-09-26

我想知道说明书中的报价:(https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html)

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

外包所有内联脚本是一项耗时的任务。

我的问题是从安全的角度出发的。通过将所有内联脚本(例如JavaScript)提取到外部源中,您真的能获得任何安全性方面的好处吗?

谢谢

关键是

用户代理无法判断内联脚本是否被攻击者注入。

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

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

。提取您想要运行的脚本不会提供任何安全好处,它只是让您在仍然使用CSP的情况下运行您想要的脚本。

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