【发布时间】:2014-01-23 07:43:08
【问题描述】:
我正在编写一个 java-websocket 服务器作为加密货币客户端。
出于安全原因,我想限制对本地计算机的访问。
有没有办法通过 IP 或主机名限制对 java-websocket 服务器的访问?
如果有,怎么做?
【问题讨论】:
标签: java localhost restrict java-websocket
我正在编写一个 java-websocket 服务器作为加密货币客户端。
出于安全原因,我想限制对本地计算机的访问。
有没有办法通过 IP 或主机名限制对 java-websocket 服务器的访问?
如果有,怎么做?
【问题讨论】:
标签: java localhost restrict java-websocket
你应该将你的监听IP指定为127.0.0.1,这样就不可能从外部连接。
编辑
查看 ChatServer.java 示例,绑定发生在
ChatServer s = new ChatServer( port );
该类实现了两个构造函数:
public ChatServer( int port ) throws UnknownHostException {
super( new InetSocketAddress( port ) );
}
public ChatServer( InetSocketAddress address ) {
super( address );
}
因此您也可以使用 inetSocketAddress 调用服务器。创建一个绑定到本地主机:
new ServerSocket(9090, 0, InetAddress.getByName(null));
然后用它而不只是端口调用服务器。
所以替换
ChatServer s = new ChatServer( port );
与
InetSocketAddress myLocalSocket = new ServerSocket(9090, 0, InetAddress.getByName(null));
ChatServer s = new ChatServer( myLocalSocket );
在您的示例中,它应该可以工作。
【讨论】:
InetSocketAddress 示例吗?提前非常感谢您!
Max 接受的答案将阻止从外部连接到您的套接字,但您应该考虑另一种攻击向量。
可以通过托管在任何外部网站上的 JavaScript 与您的本地主机 WebSocket 建立连接。如果您的本地用户被诱骗访问远程站点,则该站点托管的 HTML/JavaScript 将能够与您的本地 Web 套接字进行通信。
您可以通过限制基于连接的 Origin 标头值来缓解这种情况,这将指示生成 WebSocket 连接请求的脚本源地址。请记住,Origin 标头是可选的,您依赖浏览器将其适当地设置为脚本的来源。
【讨论】: