Кодированный процент (% 25) с параметром пути Spring RequestMapping дает HTTP 400 - PullRequest
0 голосов
/ 14 ноября 2018

Я создал контроллер для поиска данных.Но когда я умираю с ключевым словом "%", возвращается ошибка HTTP 400.Вот Contrller:

@RequestMapping(value = "/search/{txtKeyWord}")
public String pageVipStory(@PathVariable("txtKeyWord") String txtKeyWord, Model model) {
     logger.info("Keyword In URL: " + txtKeyWord);
     model.addAttribute("txtKeyWord", txtKeyWord);
     model.addAttribute("txtKeyWordEndCode", UriUtils.encode(txtKeyWord, "UTF-8"));
     getMenuAndInfo(model, "Search " + txtKeyWord);

     return "web/searchPage";
}

Со ссылкой: "http://localhost:8080/search/%25", сообщение об ошибке:

org.springframework.security.web.firewall.RequestRejectedException:Запрос был отклонен, поскольку URL содержал потенциально вредоносную строку «% 25» в org.springframework.security.web.firewall.StrictHttpFirewall.rejectedBlacklistedUrls (StrictHttpFirewall.java:325) ~ [spring-security-web-5.1.1.RELEASE.jar: 5.1.1.RELEASE] в org.springframework.security.web.firewall.StrictHttpFirewall.getFirewalledRequest (StrictHttpFirewall.java:293) ~ [spring-security-web-5.1.1.RELEASE.jar: 5.1.1.RELEASE] в org.springframework.security.web.FilterChainProxy.doFilterInternal (FilterChainProxy.java:194) ~ [spring-security-web-5.1.1.RELEASE.jar: 5.1.1.RELEASE] в org.springframework.security.web.FilterChainProxy.doFilter (FilterChainProxy.java:178) ~ [spring-security-web-5.1.1.RELEASE.jar: 5.1.1.RELEASE] в org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate (DelegatingFava):357) ~ [spring-web-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.web.filter.DelegatingFilterProxy.doFilter (DelegatingFilterProxy.java:270) ~ [spring-web-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.12.jar: 9.0.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.12.jar: 9.0.12] в org.springframework.web.filter.RequestContextFilter.doFilterInterter.java: 99) ~ [spring-web-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) ~ [spring-web-5.1.2.RELEASE.jar: 5.1.2.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.12.jar: 9.0.12]в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.12.jar: 9.0.12] at org.springframework.web.filter.FormContentFilter.doFilterInternal (FormContentFilter.java:92) ~ [spring-web-5.1.2.RELEASE.jar: 5.1.2.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) ~ [spring-web-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.12.jar: 9.0.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:6)tomcat-embed-core-9.0.12.jar: 9.0.12] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:93) ~ [spring-web-5.1.2.RELEASE.jar: 5.1.2.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) ~ [spring-web-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.12.jar: 9.0.12] на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.12.jar: 9.0.12] на org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics (WebMvcMetricsFilter.java:154) ~ [spring-boot-activator-2.1.0.BUILD-20181030.063958-621.jar: 2.1.0.BUILD-SNAPSHOT] или,]в org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal (WebMvcMetricsFilter.java:107) ~ [Весна-загрузочный привод-2.1.0.BUILD-20181030.063958-621.jar: 2.1.0.BUILD-ПАНОРАМА] в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) ~ [Весна-веб-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [Встраивать-кот-ядро-9.0.12.jar: 9.0.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [Встраивать-кот-ядро-9.0.12.jar: 9.0.12] в org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:200) ~ [Весна-веб-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) ~ [Весна-веб-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [Встраивать-кот-ядро-9.0.12.jar: 9.0.12] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [Встраивать-кот-ядро-9.0.12.jar: 9.0.12] в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:199) ~ [Встраивать-кот-ядро-9.0.12.jar: 9.0.12] в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:96) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:490) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:139) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:92) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:74) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:343) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.coyote.http11.Http11Processor.service (Http11Processor.java:408) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java:66) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.java:770) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1415) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) [Па: 1.8.0_172] в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) [Па: 1.8.0_172] в org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) [Встраивать-кот-Core-9.0.12.jar: 9.0.12] at java.lang.Thread.run (Thread.java:748) [na: 1.8.0_172]

Кто может показать мне, где ошибка. И как это побороть? Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете использовать брандмауэр Spring Security по умолчанию, используя свой пользовательский экземпляр StrictHttpFirewall .

@Bean
public HttpFirewall allowUrlEncodedPercentHttpFirewall() {
    StrictHttpFirewall firewall = new StrictHttpFirewall();
    firewall.setAllowUrlEncodedPercent(true);
    return firewall;
}

Внимание, это может привести к эксплойтам, связанным с двойным кодированием URL, которые приводят кобход ограничений безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...