REST API - Prevención XSS - ¿Cuándo y cómo?

2

Actualmente estoy desarrollando una API REST con Java EE y MySQL, que alimentará los datos a una aplicación de Android. Los datos provienen de una interfaz de AngularJS. Así que mis preguntas son, cuando: ¿Cuándo me escapo de los datos? Antes de que se rellene en las declaraciones preparadas? Cuando entrego el JSON? ¿Ambos?

Y cómo: ¿Cómo debo escapar de los datos? Actualmente estoy jugando con ESAPI y encodeForHTML . El problema aquí es que se escapa a cosas como @ y :) que me gustaría apoyar.

    
pregunta JoJae 22.05.2015 - 23:23
fuente

1 respuesta

0
  

¿Cuándo puedo escapar de los datos?

Básicamente, lo más tarde posible. La base de datos está en un lugar donde almacenar datos, no es un lugar para codificar (escapar) datos. Por supuesto, use declaraciones preparadas parametrizadas para evitar cualquier inyección SQL , pero eso debería ser lo más lejos posible. Su objetivo para escribir en la base de datos es simplemente almacenar los datos correctamente y evitar que cualquier atacante rompa el contexto y manipule las consultas en su propio beneficio.

Siempre piense que si un cliente / gerente / proveedor necesita una exportación de los datos, es mucho más fácil si estos datos ya están en formato sencillo. Puede convertirse en un dolor de cabeza si luego tiene que comenzar a convertirlo de HTML / JSON y luego volver al formato correcto para la exportación.

Por lo tanto, la solución es codificar para JSON (pero no para HTML) cuando se entrega el JSON (preferiblemente utilizando un codificador Java JSON probado y probado).

No mencionas cómo estás renderizando en tu aplicación de Android. Si está utilizando un control no web, no necesita escapar en absoluto. Si el controlador no interpreta HTML y simplemente está configurando elementos de texto, la aplicación no ejecutará ningún script inyectado. Si está generando una vista web en Android en el cliente, debe codificar HTML en este punto.

    
respondido por el SilverlightFox 23.05.2015 - 15:54
fuente

Lea otras preguntas en las etiquetas