【问题标题】:Restrict java-websocket access to localhost限制 java-websocket 对本地主机的访问
【发布时间】:2014-01-23 07:43:08
【问题描述】:

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

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

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

如果有,怎么做?

【问题讨论】:

    标签: java localhost restrict java-websocket


    【解决方案1】:

    你应该将你的监听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 示例吗?提前非常感谢您!
    • 做我的客人。请注意,我没有机会对其进行实际测试,因此如果它有效,我们将不胜感激。
    • 非常感谢马克斯!我相信我们身后的许多人都会从你的好榜样中受益!
    • 很高兴我能帮上忙。祝您的项目一切顺利。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2017-03-29
      • 2012-06-07
      相关资源
      最近更新 更多