10

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

我是否认为运行 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]>

这似乎更像我所期待的。

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

关于如何以更传统的方式启动它的任何想法可以被说服只接受来自本地进程的连接?

4

3 回答 3

5

完全有效的问题。

打开一个 slime 服务器后,你会注意到:

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,并且此行为已记录在案。我同意,这似乎是错误的默认值。

于 2010-09-19T21:09:43.040 回答
1

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

于 2010-09-20T17:30:27.277 回答
1

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

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

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

或从命令行使用:

mvn clojure:swank -Dclojure.swank.host=someotherhostname
于 2010-09-21T04:28:44.120 回答