javascript - 防止DOM篡改和修改

标签 javascript dom

我想知道是否有可能在创建 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 还是提高了标准。

接受网页可以合法更改或因干扰而更改的事实 在执行环境中运行的东西,让我们(和我的研发)去 下一个层次:关于 D​​OM 篡改的实时知识和能力 区分“自作自受”和恶意/意外篡改。

我的研发已经更进了一步,我很乐意与你分享,但是 在侧 channel 上,因为在此线程上下文中可能会被错误地感知。

关于javascript - 防止DOM篡改和修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551184/

相关文章:

javascript - ng-init 在选择选项中覆盖 ng-model (添加了 plunker)

javascript - 如何使用 jquery 和 javascript 创建模态窗口以帮助用户做出选择

javascript - 如何在此特定网站上以编程方式模拟用户点击?

css - 将 div 标签注入(inject)每个 <a> 链接

javascript - InAppBrowser (PhoneGap Build 3.1.0) 事件不会在 Android 2.3 上触发

javascript - 是否有使回调看起来不错的 JavaScript 预处理器?

javascript - 拖放后无法访问元素

php - 将 php 文件加载到弹出窗口中并将 php 变量发布到该弹出窗口(使用 onclick)

javascript - 在 React Bootstrap 3 的文本区域内标记

JavaScript DOM 编码 - 'undefined' 错误