2011-05-24 15 views
14

Ho un servizio web che richiederà alcuni input dalle macchine autenticate come XML (questo è per un sistema di gestione di rete che sto integrando con altri software) ed eseguo uno script di shell con alcuni dati XML come argomenti.Comandi di shell di escape In java?

In Java (/ Linux), qual è il modo migliore per sfuggire ai comandi della shell per garantire che qualcuno non possa passare argomenti dannosi al mio servizio web?

sostanza in un esempio estremamente semplificato, Im un input in via WS

<foo> 
<bar>ABCDEF</bar> 
</foo> 

then running somescript.pl <<data in <bar> field>> here 

Devo garantire che questo non può essere utilizzato per eseguire comandi di shell arbitrari, ecc.

Grazie!

+0

Quale shell? Diverse shell hanno diverse convenzioni di escape. –

+1

La domanda afferma Java su Linux. –

+1

@Gweebz, che non risponde alla domanda "Quale shell?". Linux ha molte shell differenti. – Kaj

risposta

12

suggerirei utilizzando ProcessBuilder o uno dei metodi Runtime.exec che non corsa attraverso il guscio e quindi non richiede shell fuga per evitare attacchi di iniezione (qui).

Può utile considerare utilizzando tubo STDIN del processo per trasferire i dati XML anche - Perl può banalmente gestire la lettura da STDIN. Ci sono generalmente dei limiti con gli argomenti della riga di comando.

Felice codifica.

+1

Davvero una risposta sensata. L'avrei scritto lo stesso, parola per parola, se non lo avessi fatto prima. +1 – gd1

+0

Grazie per la pronta risposta informativa! – Yablargo

0

Se non è possibile utilizzare un ProcessBuilder, è possibile considerare Apache commons-text escapeXSI.

(non importa il nome: XSI è l'estensione X/Open System Interfaces, una specifica aggiuntiva allo Single UNIX Specification, quindi tutto ciò che cerca di essere simile a UNIX più o meno conforme a questo).

Problemi correlati