unescape question online mark escape characters acute java json spring spring-mvc jackson

java - question - Cómo html escape values ​​por generador Jackson



unescape html javascript (2)

Hay varias formas, dependiendo de cómo puede identificar las cosas de las que quiere escapar. Algunos pensamientos:

  • Si desea citar / escapar todas las cadenas, puede definir un serializador String personalizado
  • Primero podría serializar como árbol JSON (JsonNode) - ObjectMapper.convertValue (pojo, JsonNode.class) - modificarlo, luego serializarlo a JSON (ObjectMapper.writeValue (intermediateTree))
  • Si desea un sistema flexible donde pueda agregar anotaciones para campos que necesitan un manejo especial, puede usar la función Jackson 1.7 de ContextualSerializers; serializador personalizado que puede reconfigurarse en base a anotaciones. Puede parecer una exageración al principio, pero esto podría usarse para especificar fácilmente modificadores personalizados (propiedad de anotación con valor de Clase, que indica el objeto que el serializador puede llamar para modificar el valor que se serializa, como escape)

Generamos muchos objetos JSON utilizando Spring y su MappingJacksonHttpMessageConverter integrado. Todo bien.

Pero ahora quiero html escapar los valores de cadena de mi (cualquier tipo de) objetos para evitar XSS.

Entonces, ¿cómo abordo este problema? Primero pensé que podría escribir un asignador de objetos personalizado y ponerlo en el MappkingJacksonHttpMessageConverter. Sin embargo, writeValue toma un objeto, y no quiero eso, quiero tener sus campos para iterar. En lugar de hacer eso yo mismo, apuesto a que el convertidor jackson también necesita hacer eso. Entonces quiero influenciar esa parte.

Ahora termino con una interfaz SerializerProvider. La implementación estándar (StdSerializerProvider) recibe una llamada de ObjectMapper. Entonces, en algún lugar allí quiero anular / influir en el método que es responsable de establecer los valores.

¿Es eso posible? Por lo que puedo ver, es difícil de extender. No puedo anular el StdSerializerProvider para anular el método que usa ObjectMapper. Quizás necesito anular otro?

O, quizás esto es totalmente incorrecto y tengo que abordarlo desde un ángulo totalmente diferente.

¿Alguna idea?

Oh, por cierto, la implementación del SerializerProvider yo mismo y la creación de una composición que delegue en StdSerializerProvider, podría ser posible, pero preferiría no hacerlo. (Ya tengo problemas para crear instancias del StdSerializerProvider).

¡Cualquier pensamiento es apreciado!


Esta respuesta fue dada, mientras que la pregunta era sobre la verificación de que la cadena no contiene XSS y no escapa. Esta respuesta no te ayudará, si quieres escapar de las cuerdas.

¿Qué ocurre con la validación del objeto creado (Objeto de comando) con la Validación de judías JSR 303 ?

Por ejemplo, utilizando un not @NotHtml (anotación y validación) a las propiedades de cadena del "Objeto de comando".

( Por supuesto, debe implementar las Anotaciones y el Validador de @NotHtml (@NotJavaScript o @NotXSS) por su cuenta ) .