Desinfectar publicaciones XSS de terceros en la API de Java

2

Tenemos algunos servicios RESTful API que hemos estado usando durante varios años. Recientemente, hemos empezado a considerar la posibilidad de presentarlos a clientes de terceros para que puedan escribir sus propias interfaces de usuario y podamos trabajar en la construcción de esta capa de servicio. Desafortunadamente, esto significaría que no tendríamos control sobre la ejecución de que los datos se desinfecten antes de la publicación, o antes de la representación, lo que deja un riesgo potencial para XSS (por ejemplo, si alguien publicara datos con JavaScript en un área de texto que podría guardarse en el DB ).

Nuestra pila es Apache, Tomcat y Java.

¿Alguien sabe de una manera de poner algún tipo de filtro delante de estos puntos finales de API existentes que podrían manejar datos de desinfección tanto entrantes como salientes (aunque entrantes es probablemente lo más importante)? Como se mencionó, estas son API de larga data que no eran de acceso público, por lo que habíamos estado manejando esto en la capa de UI, pero nos gustaría evitar tener que volver a escribir cada punto final existente para manejar la desinfección si es posible.

    
pregunta MTP Daily 24.08.2016 - 23:00
fuente

1 respuesta

1

Esta es una necesidad común y el enfoque habitual es hacer 3 cosas:

  1. desarrolle un esquema que describa entradas aceptables y, opcionalmente, salidas para cada punto final

    Si estas API utilizan JSON o XML para sus entradas y respuestas, y tienen formatos de solicitud y respuesta consistentes por punto final, hay idiomas de esquema para esos formatos.

    Si no, o si la composición de las solicitudes aceptables, qué campos pueden existir o no, qué tipos de valores pueden aparecer, etc., requiere algún contexto y no necesariamente puede ser validada genéricamente, entonces esto puede ser un desafío.

  2. introduce una puerta de enlace API en la arquitectura

    Las puertas de enlace API están diseñadas para vivir en el borde de la infraestructura, como un servidor web, pero también para la ejecución de lógica compleja, por lo que todas incluyen alguna integración de lenguaje en tiempo de ejecución.

    Algunas opciones de código abierto son:

    Varios de estos tienen opciones de soporte comercial.

  3. Introduzca la lógica de validación utilizando las definiciones de esquema en la puerta de enlace de la API para cada punto final.

    Las puertas de enlace de la API ofrecen muchos otros beneficios más allá de la validación de solicitud / respuesta que son importantes cuando se exponen las API a: las necesidades como autenticación / autorización, limitación de velocidad, medición, métricas, listas blancas / negras, almacenamiento en caché, transformación también están disponibles.

respondido por el Jonah Benton 25.08.2016 - 01:45
fuente

Lea otras preguntas en las etiquetas