我想知道是否有可能在创建 DOM 后以某种方式“锁定”它并确保 JavaScript 无法进一步修改它。
目的是保持网页的完整性。
我相信这是不可能的,但仍然希望有人有一个有趣的想法。
最佳答案
@Stu 已经说过的简短回答:不,这是不可能的。
让我们先声明免责声明:我在过去 3 年一直在研究 关于基于 DOM 的攻击,例如称为浏览器中人 (MitB) 的攻击,已有多年的历史。 我从事研发工作的公司专注于 Web 应用程序的完整性。
因为你不能“锁定”DOM,你能做的最好的事情就是限制可以 访问并更改它:正如@CBroes 所说,您可以从 Content Security Policy (CSP) 开始这样你的服务器就可以 指示浏览器允许哪些脚本/样式源。
CSP 的目的可以被任何可以剥离 HTTP header 或 meta
的东西打败
浏览器解析之前来自 HTTP 响应的标记,例如MitB 木马。
Subresources Integrity (SRI)允许你告诉浏览器“嘿,我想要这个
资源当且仅当它的当前哈希匹配这个。你应该提供
您使用 integrity
属性知道的散列。这特别好,如果
您正在从 CDN 等远程位置加载资源:如果他们得到
遭到破坏并且您正在加载的脚本添加了恶意负载,您的应用程序将受到破坏。
至于 CSP,例如 MitB 木马将能够剥离这些属性 在浏览器解析之前,尽管如此,使用 SRI 还是提高了标准。
接受网页可以合法更改或因干扰而更改的事实 在执行环境中运行的东西,让我们(和我的研发)去 下一个层次:关于 DOM 篡改的实时知识和能力 区分“自作自受”和恶意/意外篡改。
我的研发已经更进了一步,我很乐意与你分享,但是 在侧 channel 上,因为在此线程上下文中可能会被错误地感知。
关于javascript - 防止DOM篡改和修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551184/