【问题标题】:clojure swank server opens public port?clojure swank 服务器打开公共端口?
【发布时间】:2010-09-19 20:17:26
【问题描述】:

(这个问题被否决了,我觉得很奇怪。我怎么得罪了?)

我是否认为运行 swank 服务器通常会向全世界开放端口 4005,而不是绑定到仅限本地主机的连接?

因此,任何在咖啡馆进行黑客攻击的人不仅允许路人在他们的计算机上执行任意代码,而且还为他们提供了一个很好的界面来执行此操作。

似乎当我使用“mvn clojure:swank”或“lein swank”或 (swank.swank/start-server "/tmp/yo") 运行 swank 服务器时

然后我得到类似的东西(感谢迈克!):

$lsof -i -P
java      11693 john   13r  IPv6 6701891      0t0  TCP *:34983 (LISTEN)

事实上,我可以从同一网络上另一台机器上运行的 emacs 进行连接。

(swank.swank/start-server "/tmp/yo")

如果我手动启动服务器,它会产生以下输出

Connection opened on local port  34983
#<ServerSocket ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=34983]>

鉴于:

(swank.swank/start-server "/tmp/yo" :host "localhost")

产生:

Connection opened on local port  40368
#<ServerSocket ServerSocket[addr=localhost/127.0.0.1,port=0,localport=40368]>

这似乎更像我的预期。

这样做有什么好的理由吗?

有什么想法可以说服它只接受来自本地进程的连接吗?

【问题讨论】:

    标签: emacs clojure swank


    【解决方案1】:

    完全有效的问题。

    打开一个史莱姆服务器后,你会注意到:

    eames:~:% lsof -i -P | grep 4005
    java      41477  mjd   33u  IPv6 0x0b8956d0      0t0  TCP [::127.0.0.1]:4005 (LISTEN)
    

    连接正在侦听本地地址的 4005 端口。此接口未暴露给网络,因此网络上的其他设备无法连接到您的 slime 服务器。

    编辑:

    这是我使用 leiningen 启动 swank 的结果,它提供“localhost”作为swank.swank/start-server 的参数。您可能需要仔细检查 leiningen 插件是否打开了非本地端口。

    如果没有明确提供主机,swank 会在每个地址上打开连接是对的。相关代码为swank.util.net.sockets/make-server-socket,并记录了此行为。我同意,这似乎是错误的默认设置。

    【讨论】:

    • java 10561 john 14r IPv6 6521448 0t0 TCP *:4005 (LISTEN)
    • 这是一个公开的端口。你是怎么开始时髦的?
    • 迈克,对于超级简洁的回复感到抱歉。正在编辑我的原件,不知何故没有注意到我的复制和粘贴已进入 cmets。感谢您的诊断!
    • 看到同样的事情:java 8578 john 43u IPv6 597878 0t0 TCP *:4005 (LISTEN) using $lein version Leiningen 1.3.1 on Java 1.6.0_20 Java HotSpot(TM) Client VM 和端口已打开,通过从第二台机器上的 emacs 连接到它来确认。
    • 如果您使用swank-clojure.el,您可以在format 字符串中添加:host \"localhost\",该字符串控制服务器在swank-clojure-init 中的启动方式(查找"(swank.swank/start-server ...)\n\n")拥有它仅在 localhost 上收听。
    【解决方案2】:

    它只接受一个连接,所以即使它暴露在外面,一旦你连接它就会停止监听。

    【讨论】:

    • 当你断开连接时它不会开始收听只是有点烦人(虽然我这样更安全)而且重新启动它而不是必须记住更多的工作当我完成时停止它。
    【解决方案3】:

    如果您使用的是 clojure-maven-plugin,则最近发布了 1.3.4 版,现在针对 localhost 启动 swank 服务器以防止出现此问题。

    可以在您的 pom.xml 文件中配置此行为:

    <configuration>
      <swankHost>someotherhostname</swankHost>
    </configuration>
    

    或从命令行使用:

    mvn clojure:swank -Dclojure.swank.host=someotherhostname
    

    【讨论】:

    • 很高兴你在我注意到这个漏洞的一天之内就解决了这个漏洞。干得好马克!我希望我能接受两个答案!
    • 我已经测试了快照版本(git clone 然后 mvn install 然后修改项目 pom.xml)。这是一种享受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2021-06-22
    • 2015-09-08
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多