XSS 攻撃を避けるために、Jackson Mapper を使用して Spring MVC で HTML をエスケープします。
Jackson だけでエスケープする方法と、Spring で Jackson を構成する方法を検索します。
"<" ">" のようなテキストで json をエクスポートしようとしましたが、それらをエスケープすることを期待してい<
ます>
。たとえば、 "bold tag"<b>
で囲まれたテキストを追加しました。テキストは、フロント エンドの 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>