(这个问题被否决了,我觉得很奇怪。我怎么得罪你了?)
我认为运行swank服务器通常会向世界开放端口4005,而不是绑定到仅限本地主机的连接,这是正确的吗?
因此,任何在咖啡馆里进行黑客攻击的人不仅允许路人在他们的电脑上执行任意代码,而且还为他们提供了一个很好的界面。
当我使用'mvn clojure: swank ',或者'lein swank',或者(swank.swank/start-server "/tmp/yo")运行swank服务器时,似乎是这样的。
然后我会得到类似这样的东西(谢谢Mike!):
$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]>这似乎更像是我所期待的。
这样做有什么好的理由吗?
关于如何说服更传统的启动方式只接受来自本地进程的连接,您有什么想法吗?
发布于 2010-09-20 05:09:43
完全合理的问题。
在打开一个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的结果,leiningen将"localhost“作为参数提供给swank.swank/start-server。您可能需要仔细检查leiningen插件是否正在打开非本地端口。
您说得对,如果没有显式提供主机,swank会在每个地址上打开连接。相关代码为swank.util.net.sockets/make-server-socket,并记录了此行为。我同意,这似乎是错误的违约。
发布于 2010-09-21 01:30:27
它只接受一个连接,所以即使它暴露在世界上,一旦你连接,它就会停止侦听。
发布于 2010-09-21 12:28:44
如果你使用的是clojure-maven-plugin,最近发布了1.3.4版本,现在可以在localhost上启动swank服务器来防止这个问题。
可以在pom.xml文件中使用以下命令配置此行为:
<configuration>
<swankHost>someotherhostname</swankHost>
</configuration>或者从命令行使用以下命令:
mvn clojure:swank -Dclojure.swank.host=someotherhostnamehttps://stackoverflow.com/questions/3747291
复制相似问题