Sev*_*lix 5 html javascript security web content-security-policy
出于安全目的,我在我的公共站点中实现了 CSP 标头,并重构了代码以删除任何内联 javascript 实例,如 onclick=foo()和<a href='javascript: bar()'。
我们最近与将代码注入页面的第 3 方集成。每个面向公众的页面都需要这样做。问题是他们的代码包含大量内联 javascript(与上面提到的相同)并且违反了我们禁止内联脚本的 CSP 标头。
我的理解是,如果您必须'unsafe-inline'为脚本添加内容,那么由于存在剩余的安全风险,您还不如根本不实施 CSP。
我们能够更改每页的 CSP 标头,但由于每个页面都需要代码,因此似乎要么全部要么全无。
看起来您不能'unsafe-inline'只允许页面的特定部分,或者我们可以只允许该部分。
是我允许'unsafe-inline'和打败 CSP 的唯一选择吗?
小智 4
\n\n\n我唯一的选择就是允许
\n\'unsafe-inline\'并挫败 CSP 的全部意义吗?
最有可能的是,是的。对不起。但可能有办法解决这个问题。
\n\n如果您确切知道第三方脚本将向您的站点注入哪些代码,您可以通过其哈希值在 CSP 中将该代码列入白名单。例如,如果您知道将注入以下脚本:
\n\n<script>alert("hello world");</script>\nRun Code Online (Sandbox Code Playgroud)\n\n你可以计算
\n\n> Base64(SHA256(\'alert("hello world");\'))\n"1tD3lYbOBFeMLrXs+T9Tv9xEgcMsVs032rlMyrYSa0c="\nRun Code Online (Sandbox Code Playgroud)\n\n并将以下内容添加到您的 CSP:
\n\nscript-src \'sha256-1tD3lYbOBFeMLrXs+T9Tv9xEgcMsVs032rlMyrYSa0c=\'\nRun Code Online (Sandbox Code Playgroud)\n\n当然,如果涉及多个内联脚本,这将极大地增加您的策略的大小,并且除非这些脚本的内容绝对恒定,否则它根本不起作用。因此,这是否可行将在很大程度上取决于您的应用程序以及您试图保持兼容性的脚本。(它甚至可能会随着供应商\xe2\x80\xa6 更新该脚本而改变)
\n