我想使用WebSocket为我的应用程序(Daemon<->WebGui和Daemon<->FatClient等)进行进程间通信。在测试期间,我尝试通过websocket.org上的JavaScriptWebSocket客户端连接到本地运行的web套接字服务器(ws://localhost:1234)
我现在的问题是:
为什么这是可能的?浏览器中是否没有实现跨源策略?
我之所以这样问是因为如果websocket.org是坏的,它可以尝试与我的本地WS服务器进行通信,并将从localhost接收到的每一条消息重定向到任何其他服务器:
Local WebSocket Server Browser Evil Web Server
at ws://localhost:1234 at http://evil.tld
| | |
| |------[GET /]--------->|
| |<-----[HTML+EvilJS]----|
|<------[connect ws://..]----| |
|<----[some communication]-->| |
| |----[evil forward]---->|
| | |
我还没有测试整个用例,但是websocket.org提供的JS中的ws://localhost的连接肯定有效。
发布于 2018-03-26 08:59:09
。浏览器发送可由应用程序检查的“原始”标题。
在Java [1]中:
@override
public void onOpen(WebSocket clientSocket,ClientHandshake handshake){
string clientOrigin = handshake.getFieldValue(“origin”);
if(clientOrigin == null ||!clientOrigin.equals(WEBSOCKET_ALLOWED_ORIGIN_HEADER)){
logger.log(Level.WARNING,“Client did not sent correct origin:”+ clientOrigin);
clientSocket.close();
return;
}
// ...
}
https://stackoverflow.com/questions/-100007771
复制相似问题