2010-09-19 4 views
10

(Questa domanda è stata downvoted, che trovo strano.Come ho offeso?)server di clojure swank apre la porta pubblica?

Ho ragione di pensare che l'esecuzione di un server Swank di solito apre la porta 4005 al mondo, non legata alle connessioni solo localhost?

Così chiunque si intrufola in un bar non solo consente ai passanti di eseguire codice arbitrario sul proprio computer, ma offre loro un'interfaccia piacevole con cui farlo.

Sembra che quando ho eseguito un server Swank con 'clojure mvn: Swank', o 'Lein Swank', o (swank.swank/start-server "/ tmp/yo")

poi ho ottenere 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]> 

che sembra più come me mi aspettavo.

C'è qualche buona ragione per farlo?

Qualche idea su come i modi più convenzionali di avviarlo potrebbero essere persuasi ad accettare solo connessioni dai processi locali?

risposta

6

Domanda totalmente valida.

Dopo l'apertura di 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 riesco a connettermi al tuo server melma.

edit:

Questo era il mio risultato di partenza Swank usando Leiningen, che fornisce "localhost" come argomento di swank.swank/start-server. Potresti voler ricontrollare che il plugin leiningen stia aprendo porte non locali.

Hai ragione che Swank apre la connessione su ogni indirizzo se un host non è esplicitamente fornito. Il codice rilevante è swank.util.net.sockets/make-server-socket e questo comportamento è documentato. Sono d'accordo, sembra il default sbagliato.

+0

java 10561 Giovanni 14r IPv6 6.521.448 0T0 TCP *: 4005 (ASCOLTA) –

+0

Questa è una porta pubblicamente esposta. Come stai iniziando Swank? –

+0

mike, mi dispiace per la risposta super-terse. stava modificando il mio originale e in qualche modo non ho notato che il mio copia e incolla era entrato nei commenti. Grazie per la diagnosi! –

1

accetta solo una connessione, quindi anche se è esposto al mondo smette di ascoltarlo una volta connesso.

+0

ed è solo un po 'fastidioso che non inizi ad ascoltare quando si disconnette (anche se sono molto più sicuro in questo modo) e non è molto più difficile riavviarlo invece di dover ricordare di fermarlo quando ho finito. –

1

Se si utilizza il plugin clojure-maven, la versione 1.3.4 è stata rilasciata di recente che ora avvia il server di swank contro localhost per prevenire 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 
+0

È meraviglioso che tu ti sia preso la briga di chiudere questa scappatoia in un giorno in cui me ne accorga. Ben fatto, Mark! Vorrei poter accettare due risposte! –

+0

Ho testato la versione dell'istantanea (clone git seguito da installazione mvn seguita dalla modifica del progetto pom.xml). Funziona a meraviglia. –

Problemi correlati