2011-05-24 10 views
14

Mam usługę sieci web, która pobiera dane wejściowe z maszyn uwierzytelnionych jako XML (dotyczy to systemu zarządzania siecią, który integruję z innym oprogramowaniem) i wykonuje skrypt powłoki z niektórymi danymi XML jako argumentami.Polecenia ucieczki powłoki w języku Java?

W języku Java (/ Linux), jaki jest najlepszy sposób na uniknięcie poleceń powłoki, aby zapewnić, że ktoś nie będzie mógł przekazywać złośliwych argumentów do mojego serwisu internetowego?

Zasadniczo w bardzo uproszczony przykład, Im biorąc pewien wkład w pośrednictwem WS

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

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

muszę zapewnić, że to nie może być stosowany do wykonywania poleceń powłoki arbitralnych, itp.

Dzięki!

+0

Która powłoka? Różne powłoki mają różne konwencje ucieczki. –

+1

Pytanie dotyczy języka Java w systemie Linux. –

+1

@ Gweebz, który nie odpowiada na pytanie "Która powłoka?". Linux ma wiele różnych powłok. – Kaj

Odpowiedz

12

sugeruję pomocą ProcessBuilder lub jedną z metod Runtime.exec który nie przejściu przez powłokia tym samym nie wymaga powłoki ucieczki aby uniknąć ataków iniekcji (tutaj).

Może ona również korzystna pod uwagę użycie STDIN rury przetwarzać do przesyłania danych XML - Perl może trywialny uchwyt odczytywania standardowego wejścia. Zasadniczo istnieją ograniczenia z argumentami wiersza poleceń.

Szczęśliwe kodowanie.

+1

Naprawdę rozsądna odpowiedź. Napisałbym to samo, słowo po słowie, gdybyś nie wcześniej. +1 – gd1

+0

Dzięki za szybką, informacyjną odpowiedź! – Yablargo

0

Jeśli nie możesz użyć ProcessBuilder, możesz rozważyć Apache commons-text escapeXSI.

(nieważne, nazwa - XSI jest interfejsem X/Open System Interfaces Extension, uzupełniającą specyfikacją dla Single UNIX Specification, więc wszystko, co stara się być UNIX-podobne, jest zgodne z tym).