Spring Boot escape characters at Request Body for XSS protection

后端 未结 3 1684
别那么骄傲
别那么骄傲 2021-01-07 01:25

I\'m trying to secure my spring boot application using a XSSFilter like this:

public class XSSFilter implements Filter {

    @Override
    public void init(         


        
3条回答
  •  我在风中等你
    2021-01-07 02:21

    I resolved with a custom class:

    @Configuration
    public class AntiXSSConfig  {
    
        @Autowired()
        public void configeJackson(ObjectMapper mapper) {
            mapper.getFactory().setCharacterEscapes(new HTMLCharacterEscapes());
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        }
    
        public static class HTMLCharacterEscapes extends JsonpCharacterEscapes {
    
            @Override
            public int[] getEscapeCodesForAscii() {
                int[] asciiEscapes = CharacterEscapes.standardAsciiEscapesForJSON();
                // and force escaping of a few others:
                asciiEscapes['<'] = CharacterEscapes.ESCAPE_CUSTOM;
                asciiEscapes['>'] = CharacterEscapes.ESCAPE_CUSTOM;
                asciiEscapes['&'] = CharacterEscapes.ESCAPE_CUSTOM;
                asciiEscapes['"'] = CharacterEscapes.ESCAPE_CUSTOM;
                asciiEscapes['\''] = CharacterEscapes.ESCAPE_CUSTOM;
                return asciiEscapes;
            }
    
            @Override
            public SerializableString getEscapeSequence(int ch) {
                switch (ch) {
                    case '&' : return new SerializedString("&");
                    case '<' : return new SerializedString("<");
                    case '>' : return new SerializedString(">");
                    case '\"' : return new SerializedString(""");
                    case '\'' : return new SerializedString("'");
                    default : return super.getEscapeSequence(ch);
                }
            }
        }
    }
    

    It covers all the cases.

提交回复
热议问题