2

我正在编写一个 java-websocket 服务器作为加密货币客户端。

出于安全原因,我想限制对本地计算机的访问。

有没有办法通过 IP 或主机名限制对 java-websocket 服务器的访问?

如果是这样,怎么做?

4

2 回答 2

5

您应该将您的侦听 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 );

在您的示例中,它应该可以工作。

于 2014-01-06T00:10:35.170 回答
3

Max 接受的答案将阻止从外部连接到您的套接字,但是您应该考虑另一个攻击向量。

可以通过托管在任何外部网站上的 JavaScript 与您的 localhost WebSocket 建立连接。如果您的本地用户被欺骗访问远程站点,则该站点托管的 HTML/JavaScript 将能够与您的本地 Web 套接字进行通信。

您可以通过限制基于连接的 Origin 标头值来缓解这种情况,这将指示生成 WebSocket 连接请求的脚本源地址。请记住,Origin 标头是可选的,您依靠浏览器将其适当地设置为脚本的来源。

于 2014-03-28T18:36:37.030 回答