代码之家  ›  专栏  ›  技术社区  ›  systemdebt

springboot拦截器检查请求参数中的不安全字符并处理它们

  •  0
  • systemdebt  · 技术社区  · 7 年前

    我对春靴很陌生。

    有一个带有GET服务的spring引导应用程序。

    @RequestMapping(value = "/abc/track/{type}", method = RequestMethod.GET)
    
        public void DummFunc(                            
              @RequestParam(value="subs", required = false) String sub,
    ,  HttpServletResponse response) {}
    

    如果我将以下内容作为值传递给参数subs

    {%22endpoint%22:%22https://def.abc.com/tyu/send/eD3vpGNQW28:APA91bHOo8rYrV0xccdQz3okjZJG-QGrJX8LG6ahJnEUpMNfGedqi3hJxQsJx_8BMbH6oDjaSPPEXqzNWchWrGSkhuTkSdemikkys1U22Ipd7MsRw0owWbw89V2fslIVAJ6G5lkyvYuQ%22,%22expirationTime%22:null,%22keys%22:{%22p256dh%22:%22BK0pktn50CMsTQtqwdPlKlJtdFs0LFeXX14T1zgoz6QWnvSTp5dxtChnUP5P1JX0TsjcopbdPKyN31HfABMUyic%22,%22auth%22:%22qbO_z0vGao9wD-E5g8VU-A%22}}
    

    如果我们改为将值传递给参数subs:

    %7B%22endpoint%22:%22https://def.abc.com/tyu/send/dX5q5eV7hFQ:APA91bHib-0QXrMzjatcvTR_uaIeeJK8lf6GmXUC9Jxv0Oxth-BzD4GmWnd4-YpDZv8qSFZ0eSg9mB2YkRvkc5ezdXW5KeaHjuQZfdyDxyBXjJgE-25Xbtlk37pdm8vfLk20k0k_VxW9%22,%22expirationTime%22:null,%22keys%22:%7B%22p256dh%22:%22BCCvcBLpRqp4u0auP688_MUJLsAiwWlQSn5kpyl8YVsEo_J-KpSdnhCmVIE_BhDXBcFYflPK52hqhYf3EaOCyuY%22,%22auth%22:%22iKuW_ESkCZnubWcQu_JK8w%22%7D%7D
    

    很好用。

    为了解决这个问题,我在 application.properties

    spring.http.encoding.charset=UTF-8
    spring.http.encoding.enabled=true
    spring.http.encoding.force=true
    

    @Bean
        public CharacterEncodingFilter characterEncodingFilter() {
            System.out.println("character encoding filter called");
            CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
            characterEncodingFilter.setEncoding("UTF-8");
            characterEncodingFilter.setForceEncoding(true);
            characterEncodingFilter.setForceRequestEncoding(true);
            return characterEncodingFilter;
        }
    

    而且,我试着用 @Encoded

    https://www.concretepage.com/webservices/resteasy-3/rest-web-service-jax-rs-encoded-annotation-example-with-resteasy-3

    这些都没有解决这个问题。

    如果我使用postman chrome应用程序作为客户端,它会返回400,如果我从浏览器点击这个api,它也会返回400。最新版本的邮递员返回200。

    如果我查看postman中的请求http代码,postman的新版本 { 如邮递员的chrome应用程序所示 %7B

    { 具有 %第7B条 我自己也很好。如何在我的spring boot应用程序中修复这个问题?

    0 回复  |  直到 7 年前