Server clojure Swank apre la porta pubblica?
Domanda
(Questa domanda è stata downvoted, che trovo strano. Come ho offeso?)
ho ragione di pensare che l'esecuzione di un server di Swank di solito apre la porta 4005 per il mondo, non è vincolata alle connessioni localhost sola?
Quindi, chiunque l'hacking in un caffè non è solo permettendo passanti per eseguire codice arbitrario sul proprio computer, ma sta dando loro un'interfaccia bello farlo con.
Sembra che quando ho eseguito un server Swank con 'mvn clojure: Swank', o 'Lein Swank', o (/ start-server di swank.swank "/ tmp / yo")
allora ottengo qualcosa di simile (grazie Mike!):
$lsof -i -P
java 11693 john 13r IPv6 6701891 0t0 TCP *:34983 (LISTEN)
e anzi posso collegare da un Emacs in esecuzione su un'altra macchina sulla stessa rete.
(swank.swank/start-server "/tmp/yo")
Se inizio il server a mano, produce il seguente output
Connection opened on local port 34983
#<ServerSocket ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=34983]>
considerando quanto segue:
(swank.swank/start-server "/tmp/yo" :host "localhost")
produce:
Connection opened on local port 40368
#<ServerSocket ServerSocket[addr=localhost/127.0.0.1,port=0,localport=40368]>
Il che sembra più come mi aspettavo.
C'è un buon motivo per fare questo?
Tutte le idee su come i metodi più convenzionali di partenza potrebbe essere convinto ad accettare solo le connessioni provenienti da processi locali?
Soluzione
domanda Totalmente valido.
Dopo aver aperto un server di melma, si noterà:
eames:~:% lsof -i -P | grep 4005
java 41477 mjd 33u IPv6 0x0b8956d0 0t0 TCP [::127.0.0.1]:4005 (LISTEN)
Il collegamento è in ascolto l'indirizzo locale sulla porta 4005. Questa interfaccia non è esposto alla rete, in modo che altri dispositivi sulla rete non possono connettersi al server melma.
modifica:
Questo è stato il mio risultato di partenza Swank usando Leiningen, che fornisce "localhost" come argomento di swank.swank/start-server
. Si consiglia di verificare che il plugin Leiningen sta aprendo le porte non locali.
Hai ragione che Swank apre la connessione su ogni indirizzo se un host non è previsto in modo esplicito. Il codice in questione è swank.util.net.sockets/make-server-socket
, e questo comportamento è documentato. Sono d'accordo, sembra che il default sbagliata.
Altri suggerimenti
accetta una sola connessione in modo anche se è esposto al mondo smette di ascoltare una volta ci si connette.
Se si sta utilizzando il clojure-Maven-plugin, la versione 1.3.4 è stato recentemente rilasciato che ora avviare il server Swank contro localhost per evitare questo problema.
Questo comportamento può essere configurato nel file pom.xml con:
<configuration>
<swankHost>someotherhostname</swankHost>
</configuration>
o dalla riga di comando con:
mvn clojure:swank -Dclojure.swank.host=someotherhostname