2010-09-19 24 views
10

(Câu hỏi này đã được downvoted, mà tôi tìm thấy lạ. Làm thế nào tôi bị xúc phạm?)clojure swank server mở cổng công cộng?

Tôi có quyền nghĩ rằng chạy một máy chủ swank thường mở cổng 4005 với thế giới, không bị ràng buộc để kết nối chỉ localhost?

Vì vậy, bất cứ ai xâm nhập vào một quán cà phê không chỉ cho phép người qua đường thực thi mã tùy ý trên máy tính của họ, mà còn mang lại cho họ giao diện đẹp để làm điều đó.

Dường như khi tôi chạy một máy chủ phô trương với một trong hai 'mvn clojure: phô trương', hoặc 'Lein phô trương', hoặc (swank.swank/start-server "/ tmp/yo")

sau đó tôi có được một cái gì đó tương tự (nhờ Mike!):

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

và thực sự tôi có thể kết nối từ một emacs chạy trên máy khác trên cùng một mạng.

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

Nếu tôi khởi động server bằng tay, nó tạo ra kết quả như sau

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

Trong đó:

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

sản xuất:

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

nào có vẻ giống như tôi đã mong.

Có lý do chính đáng nào để thực hiện việc này không?

Bất kỳ ý tưởng nào về cách thức các cách bắt đầu thông thường hơn có thể được thuyết phục để chỉ chấp nhận các kết nối từ các quy trình cục bộ?

Trả lời

6

Câu hỏi hoàn toàn hợp lệ.

Sau khi mở một máy chủ chất nhờn, bạn sẽ nhận thấy:

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

Các kết nối được lắng nghe trên địa chỉ cục bộ tại cổng 4005. Giao diện này không được tiếp xúc với mạng, các thiết bị nên khác trên mạng không thể kết nối với máy chủ chất nhờn của bạn.

chỉnh sửa:

Đây là kết quả của tôi bắt đầu phô trương sử dụng leiningen, cung cấp "localhost" như một cuộc tranh cãi để swank.swank/start-server. Bạn có thể muốn kiểm tra lại xem plugin leiningen có đang mở các cổng không phải cục bộ hay không.

Bạn nói đúng rằng swank sẽ mở kết nối trên mọi địa chỉ nếu máy chủ lưu trữ không được cung cấp rõ ràng. Mã có liên quan là swank.util.net.sockets/make-server-socket và hành vi này được ghi lại. Tôi đồng ý, có vẻ như là mặc định sai.

+0

java 10561 john 14R IPv6 6.521.448 0t0 TCP *: 4005 (LISTEN) –

+0

Đó là một cổng công khai. Làm thế nào bạn bắt đầu swank? –

+0

mike, xin lỗi vì phản hồi siêu ngắn. đã chỉnh sửa bản gốc của tôi và bằng cách nào đó đã không nhận thấy rằng bản sao và dán của tôi đã đi vào nhận xét. Cảm ơn bạn đã chẩn đoán! –

1

nó chỉ chấp nhận một kết nối vì vậy ngay cả khi nó được tiếp xúc với thế giới, nó dừng nghe khi bạn kết nối.

+0

và nó chỉ là một chút khó chịu mà nó không bắt đầu lắng nghe khi bạn ngắt kết nối (mặc dù tôi an toàn hơn theo cách này) và nó không thực sự nhiều công việc để khởi động lại nó hơn là phải nhớ để ngăn chặn nó khi tôi kết thúc. –

1

Nếu bạn đang sử dụng plugin clojure-maven, phiên bản 1.3.4 gần đây đã được phát hành, bây giờ bắt đầu máy chủ swank với máy chủ cục bộ để ngăn chặn sự cố này.

Hành vi này có thể được cấu hình trong tập tin pom.xml của bạn với:

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

hoặc từ dòng lệnh với:

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

Thật tuyệt vời khi bạn đã gặp khó khăn để đóng lỗ hổng này trong vòng một ngày tôi nhận thấy nó. Làm tốt lắm Mark! Tôi ước tôi có thể chấp nhận hai câu trả lời! –

+0

Tôi đã thử nghiệm bản phát hành ảnh chụp (git clone theo sau là mvn install, sau đó sửa đổi dự án pom.xml). Nó hoạt động một điều trị. –

Các vấn đề liên quan