Previniendo XSS para la API REST

9

Tengo una API REST de primavera y un proyecto de cliente. La página HTML de proyectos del cliente utiliza las llamadas jquery ajax para obtener datos de la API REST mediante el formato json o xml. Mi pregunta es evitar los ataques XSS en una página web, ¿dónde debo realizar la codificación de los datos de entrada del usuario (es decir, los datos que no son de confianza)? Actualmente estoy codificando datos en mi Controlador REST antes de devolver la respuesta. Estoy siguiendo el artículo de la hoja de trucos de OWASP XSS Prevention. Pero como en mi caso, todo son llamadas ajax y datos que se extraen de json y se ponen en html usando jquery, no estamos seguros de dónde debería codificar el usuario los datos no confiables. ¿Es buena opción poner la codificación en el controlador REST?

Gracias de antemano.

    
pregunta MShah 28.10.2013 - 07:55
fuente

1 respuesta

21

Si la API REST simplemente devuelve JSON (y nunca HTML), a continuación, realice el HTML en el lado del cliente, en JavaScript.

Si la página HTML del cliente utiliza plantillas de JQuery, o crea HTML con llamadas a funciones como .html() , ninguna de estas de forma predeterminada tiene protección XSS. Un enfoque es que el código del cliente llame explícitamente a una función de escape en todas las entradas que no sean de confianza. Sin embargo, un enfoque que prefiero es utilizar un complemento de JQuery que realice el escape automático. Aquí hay dos enfoques para esto:

La gente puede criticar este enfoque diciendo "no se puede confiar en el control de seguridad del lado del cliente". Esa crítica se basa en malentendidos; en este caso particular, puede confiar en ello.

Es notable que AngularJS incluye el escape automático de forma predeterminada. Si escribieron JQuery desde cero hoy, espero que JQuery también incluya esto.

Una de las razones por las que no se realiza un escape de HTML en la API REST es que es posible que tenga un cliente que no sea HTML y consuma la API. En ese caso, definitivamente no desea que se aplique HTML escaping.

Es importante que devuelva JSON con el encabezado de tipo de contenido correcto (application / json) para evitar ataques de uso indebido de la API.

    
respondido por el paj28 28.10.2013 - 09:44
fuente

Lea otras preguntas en las etiquetas