gpt4 book ai didi

security - 保护 websockets 免受外部脚本的影响

转载 作者:行者123 更新时间:2023-12-04 23:53:06 27 4
gpt4 key购买 nike

在许多网页上,我们都包含外部脚本。无论是类似于 Facebook 的按钮、用于分析或广告系统的客户端代码、外部评论提供商还是其他东西。

那些脚本无法访问我的 Ajax 资源,因为一直在检查原始 header 。

但是,我有点担心这些脚本会如何处理我页面上的 websocket 连接。在这里,据我所知,仅在握手期间检查原始 header 。

假设我打开一个连接并像这样定义一个 onmessage 处理程序

var ws = new WebSocket("ws://host/resource");
ws.onmessage = function(evt) { my stuff ... }

外部脚本是否无法重新分配 onmessage 处理程序,从而无法访问我的服务器通过 websocket 发送到浏览器的所有内容?喜欢

var oldHandler = ws.onmessage;
ws.onmessage = function(evt) {
externalscript.readMystuffAndDoEvilThings(evt);
oldHandler(evt);
}

我不明白为什么这是不可能的。 wss://和 session cookie 或其他东西都不会阻止它。但也许我遗漏了什么?

最佳答案

你没有遗漏任何东西。如果您已将外部(跨源)脚本加载到浏览上下文中,则该脚本具有与“本地”(同源)脚本相同的权限。外部脚本可以以相同的方式替换您的 XHR 回调、console.log-s 和其他所有内容。

此类恶意外部脚本的问题在于 a) 您必须愿意将它们加载到您的应用程序中,并且 b) 脚本必须知道要替换什么(函数/变量名称)。

防止此类攻击的方法是使用所谓的 JavaScript 模块模式——将所有代码包装在一个匿名函数中并立即执行该函数。这样,您的代码就不会受到外部脚本的影响,因为它是在闭包(本地范围)内执行的。有关模式的更多信息和变体,请参阅此内容:http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript

关于security - 保护 websockets 免受外部脚本的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14187316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com