2011-05-24 37 views
14

Tengo un servicio web que tomará algunas entradas de las máquinas autenticadas como XML (esto es para un sistema de administración de red que estoy integrando con algún otro software) y ejecutará un script de shell con algunos de los datos XML como argumentos.Comandos de escape de shell en java?

En Java (/ Linux), ¿cuál es la mejor forma de evitar comandos de shell para garantizar que alguien no pueda pasar argumentos maliciosos a mi servicio web?

Básicamente, en un ejemplo muy simplificado, Im teniendo una cierta entrada en la vía WS

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

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

necesito para asegurar que esto no puede utilizarse para ejecutar comandos shell arbitrarios, etc.

Gracias!

+0

¿Qué shell? Diferentes proyectiles tienen diferentes convenciones de escape. –

+1

La pregunta es Java en Linux. –

+1

@Gweebz, eso no responde a la pregunta "¿Qué caparazón?". Linux tiene muchas conchas diferentes. – Kaj

Respuesta

12

que sugeriría usando ProcessBuilder o uno de los métodos Runtime.exec que no carrera a través de la cáscara y por lo tanto no requiere shell escapar para evitar ataques de inyección (aquí).

También puede beneficioso para considerar el uso de tubería STDIN del proceso de transferencia de los datos XML - Perl puede manejar trivialmente leer de STDIN. En general, hay límites con los argumentos de línea de comandos.

Happy coding.

+1

Realmente una respuesta sensata. Lo hubiera escrito igual, palabra por palabra, si no lo hubiera hecho antes. +1 – gd1

+0

¡Gracias por la pronta respuesta informativa! – Yablargo

0

Si no puede usar ProcessBuilder, puede considerar Apache commons-text escapeXSI.

(sin importar el nombre - XSI es la Extensión de Interfaces del Sistema X/Open, una especificación suplementaria al Single UNIX Specification, por lo que todo lo que intente ser similar a UNIX más o menos cumple con esto).

Cuestiones relacionadas