使用Spring MVC和Jackson Mapper进行HTML转义

我将与Jackson Jackson一起在Spring MVC中转义HTML,以避免XSS攻击。

我只搜索杰克逊的转义,以及如何在spring配置杰克逊。

我试图出口JSON包含“<”“>文本”,我希望他们逃脱&#60;&#62;

例如我加入附带一些文本“粗体标签” <b>,我希望看到的是纯黑体标记文字前端HTML,但最终文本在前端html页面中以粗体显示。

下面是我的方法,我不知道为什么它没有解决。

有人可以帮忙吗?

提前致谢!

public class CustomObjectMapper extends ObjectMapper {  

public CustomObjectMapper() {

this.getJsonFactory().setCharacterEscapes(new CustomCharacterEscapes());

}

}

public class CustomCharacterEscapes extends CharacterEscapes {

private final int[] asciiEscapes;

public CustomCharacterEscapes() {

int[] esc = CharacterEscapes.standardAsciiEscapesForJSON();

esc['<'] = CharacterEscapes.ESCAPE_STANDARD;

esc['>'] = CharacterEscapes.ESCAPE_STANDARD;

esc['&'] = CharacterEscapes.ESCAPE_STANDARD;

esc['\''] = CharacterEscapes.ESCAPE_STANDARD;

asciiEscapes = esc;

}

@Override

public int[] getEscapeCodesForAscii() {

return asciiEscapes;

}

@Override

public SerializableString getEscapeSequence(int ch) {

return null;

}

}

<bean

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<property name="messageConverters">

<array>

<bean id="jsonConverter"

class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

<property name="objectMapper">

<bean class="x.y.z.CustomObjectMapper" />

</property>

</bean>

</array>

</property>

</bean>

`

回答:

我从未尝试编写自己的HttpMessageConverter。在查看他们的解决方案与您在此处发布的内容时,我可以说我注意到的最大差异是您似乎没有实现/覆盖以下内容:

  1. protected boolean support(Class clazz),它指示您正在支持的类类型(如果您希望它具有足够的通用性来处理各种可能性,或者我的域对象特定于某个类,那么我会确认这是Object或Serializable )
  2. 受保护的对象readInternal(Class clazz,HttpInputMessage inputMessage),看起来像用于请求方
  3. 受保护的void writeInternal(Object t,HttpOutputMessage outputMessage),看起来像它用于响应端

另一种方法可能是与@ResponseBody一起简单地创建自定义Jackson序列化程序。或者,更好的是,如果您拥有一个由用户驱动的值,并将其存储在数据库中,请在插入之前对这些值进行转义。这样,您根本不需要执行任何操作,并且所讨论的值从端到端都是“安全的”。如果您想疯了,可以编写一个自定义的java.beans.PropertyEditor,它转义HTML的Strings并使用InitBinder将其插入到混合中。

最后,我想建议您,而不是尝试自己替换字符,而是使用类似Apache Commons-

Lang的StringEscapeUtils的值进行转义。

以上是 使用Spring MVC和Jackson Mapper进行HTML转义 的全部内容, 来源链接: utcz.com/qa/400133.html

回到顶部