not*_*ama 5 javascript websocket web
要打开 Websocket,客户端连接到服务器上的 tcp 套接字,然后开始握手。
客户端的握手包含一个 base64 编码的密钥 (Sec-WebScoket-Key)。
服务器应该使用 SHA-1(密钥 + magic_constant)、base64 编码进行响应。magic_constant 是特定于协议的字符串 (Sec-Websocket-Accept)。
这样做的目的是什么?我没有看到这样做有任何明显的安全原因。它不验证任何一方的身份。对于工作量证明来说,一次 SHA-1 计算并不算多。
这部分握手的目的是确保连接双方都是真正的 WebSocket 参与者。它被设计为易于为真正的 WebSocket 客户端和服务器实现,但攻击者很难诱骗 HTTP 客户端、服务器或代理冒充 WebSocket 参与者。特别是,如果浏览器中运行的一段恶意 JavaScript 可以打开到正常 HTTP 服务器的 WebSocket 连接,那将是很糟糕的,因为一旦建立连接,JavaScript 将完全控制通过通道发送的内容,并可以尝试各种畸形的超大数据,试图破坏或摧毁服务器。
更新:
正如 @notallama 指出的那样,创建恶意 WebSocket 客户端或仅使用 telnet 发送恶意数据很容易。不同之处在于,使用 WebSocket 时,攻击来自受信任的上下文(用户的浏览器和用户的网络)。浏览器从 Internet 加载不受信任的代码,但通常用于连接到不公开于 Internet 的 HTTP 服务器和中介。举一个极端的例子,想象一下如果浏览器可以打开原始 TCP 连接(没有强制的 CORS、哈希检查等)而不是 WebSocket。现在,恶意 JavaScript 可以在用户的家庭网络(或更糟糕的是,他们的工作场所内联网)上做任何它想做的事情。
特别是,HyBi 工作组花费了大量时间来解决 HTTP 中介中的一个理论上的漏洞,该漏洞可能会通过使用 WebSocket 连接来欺骗中介,让其认为自己正在与普通 HTTP 客户端进行通信,从而导致缓存污染。
归档时间: |
|
查看次数: |
1286 次 |
最近记录: |