如何解决CSP:为什么document.createElement“ script”很好而document.write“ <script ...”不好?
我有点困惑。我一直在经历presentation slide deck on Content Security Policies。在幻灯片10上,在讨论'strict-dynamic'
指令时,给出了三个示例:一个好,两个坏:
// good
<script nonce="r4nd0m">
var s = document.createElement("script");
s.src = "//example.com/bar.js";
document.body.appendChild(s);
</script>
// bad
<script nonce="r4nd0m">
var s = "<script src=//example.com/bar.js></script>";
document.write(s);
// -OR-
document.body.innerHTML = s;
</script>
Google还建议对其CSP page进行类似的更改(“重构对与CSP不兼容的JS API的调用”)。
我了解好的示例将异步加载,而不良的示例则不会(unless async defer
is added)。但是...
如果我想加载一个邪恶的脚本,两种方法都不能让我到达那里吗?
问题是“坏”方式不会(自动)传播随机数吗?还是“ {bad}”有点“ like a call to eval()”,因为您可以用它做很多事情(尽管在HTML 5中,script wouldn't execute除非附加到事件处理程序,否则显然)?
是不是假设likely uses parser-inserted user input是“坏”方式,这就是为什么它很坏(这就是我从后来发现的演示视频中得到的结果)?为什么不允许一个调用而不允许另一个调用(在给定的示例中,它们似乎实现了相同的事情-加载外部脚本)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。