Websocket:从Web套接字服务器获取信息



我对websocket非常陌生,并试图创建一个omegle作为示例。一个集中的聊天服务器,每个客户端都可以通过网络套接字连接到该服务器,该服务器根据兴趣匹配人员。此后,人们可以通过网络套接字连接进行聊天。

我只是对一件事感到好奇:一旦我的网站上线,不同的客户端不断连接,基本上是在后台,他们通过websocket连接到我的中央服务器。难道任何客户端都不能在其chrome控制台上运行javascript并注入恶意脚本,或者访问连接到服务器的客户端吗?因为连接已经建立,并且是有状态连接吗?我不确定是否有办法做到这一点。如果有,我需要注意什么安全机制?

对您的问题的回答是"是";以及";不"!

这取决于很多事情。首先,你的聊天是公开的吗?我的意思是,每个人都可以在不登录的情况下加入聊天室吗?

在这种情况下,我想每个人都可以聊天,所以想使用你的网络套接字的人可以这样做,这是公开的。

如果你的聊天是私人的,那么它是你自己的,以保护你的网络套接字事件不被所有人访问。这首先是在强大的登录过程之后注册用户。

与所有其他互联网(和基于计算机的)技术一样,websocket也会受到黑客攻击。你应该像保护基于网络的开发一样保护你的网络套接字。

键入";websocket常见攻击";在谷歌将返回你的链接,谈论网络套接字安全。

是的,客户端肯定可以注入恶意脚本,但它只会影响客户端自己的浏览器

没有。除非你明确地创建了一个漏洞,否则没有办法做到这一点。

首先,网络套接字不是对等连接。它们需要一个服务器在最终用户之间传输消息,因此,如果服务器对传入的消息请求不采取任何措施,那么第一个打算向其发送消息的用户将不会收到任何消息。本质上,这意味着只有在服务器允许的情况下,websocket客户端才能连接到用户。

然而,即使websocket是p2p连接,<em]仍然是不可能的>,或者我们会有什么样的网络?!我希望您理解,发送到客户端的任何数据都不会自动作为代码执行。它通常是字符串格式的,除非你真的eval它或其他什么,否则它永远无法运行任何代码。(或者您忘记了XSS,并且没有正确地转义将被呈现为HTML的数据。)

那么,为了回答你的问题,不。安全措施?不要eval传入数据。

然而,在websocket中所做的必须注意的是,任何客户端都可以连接(好吧,至少可以尝试)到websocket服务器。请参阅,因为websocket通常用于在客户端之间发送数据,所以当服务器接收到消息时,它通常会将该消息广播给该连接/房间中的所有人(发件人除外)。这意味着恶意用户可能会进入你的房间并发送数据,以及接收可能是私人的数据
要防止这种情况发生,请确保您设置了正确的身份验证。您可以通过cookie来实现这一点,也许可以与session或JWT一起使用(我通常使用后者)。当用户加入房间或连接时,请检查该用户是否已被授权并允许进入房间。否则,请拒绝连接。

这里有一个更广泛的解释可能会对您有所帮助。

Web套接字在TCP连接上工作。这意味着套接字连接到特定目的地并传输数据("消息")。这些信息可以双向流动(流入和流出)。用户使用客户端(最常见的是浏览器)连接到服务器。

连接是唯一的,这意味着没有两个客户端共享相同的连接。因此,没有其他人知道其他人向服务器发送什么或从服务器接收什么。

消息可以是各种类型,但最常用的是字符串。通常,人们将一些JSON对象编码在这些字符串中以执行特定操作。大致如下:

{
message: "Hello!",
channel: "general"
}

现在你的角色来了。如何对这些信息采取行动,以及向谁发送什么。标准库提供了一些功能,例如针对单个套接字或向多个套接字发送消息。把它想象成一个连接列表。他们可以向加入/离开通道发送特定的命令,因此您可以向每个通道添加更多的元数据。在前面的示例中,您可能希望将Hello!发送到具有"0"的每个连接;加入";一个通道(通过发送一个特定的命令来这样做)。

您决定命令是什么:

{
command: "join/leave",
channel: "general"
}

您可能希望将收到的每一条消息都传播给他人,或者将其留给自己(并执行一些自定义功能)。没有什么是开箱即用的——服务器收到消息,就这样


以上所有这些都意味着用户对其客户所做的任何事情都不会影响您或他人。你能知道他们行为的唯一方法是他们给你发信息。必须小心处理这些消息,因为它们可能包含任何恶意代码。

因此,我强烈建议您使用一些处理网络套接字的库,以防您想将某些东西发送给他人。如果是为了学习,请坚持简单的功能。

最新更新