【问题标题】:The request was rejected because the HTTP method "CONNECT" was not included within the whitelist [HEAD, DELETE, POST, GET, OPTIONS, PATCH, PUT]请求被拒绝,因为 HTTP 方法“CONNECT”未包含在白名单中 [HEAD、DELETE、POST、GET、OPTIONS、PATCH、PUT]
【发布时间】:2020-03-03 01:25:45
【问题描述】:

在 AWS 中部署为 .war 时,我收到 RequestRejectedException 异常。但是当我在 Heroku 中将它部署为 .jar 时,我确实遇到了任何异常。 谁能帮我理解为什么会这样?

我没有在我的应用程序的任何地方请求 HTTP“连接”。

2019-06-21 12:15:40,377 错误 osbwssupport.ErrorPageFilter - 由于异常 [请求被拒绝,因为 HTTP 方法“CONNECT”未包含在白名单中 [ HEAD、DELETE、POST、GET、OPTIONS、PATCH、PUT]] org.springframework.security.web.firewall.RequestRejectedException:请求被拒绝,因为HTTP方法“CONNECT”未包含在白名单中[HEAD,DELETE,POST,GET,OPTIONS,PATCH,PUT] 在 org.springframework.security.web.firewall.StrictHttpFirewall.rejectForbiddenHttpMethod(StrictHttpFirewall.java:316) 在 org.springframework.security.web.firewall.StrictHttpFirewall.getFirewalledRequest(StrictHttpFirewall.java:292) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:194) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:130) 在 org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66) 在 org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:105) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:123) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117) 在 org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) 在 org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:685) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:748)

public void configure(HttpSecurity http) throws Exception {
http.csrf().disable().
    authorizeRequests()
        .antMatchers("/css/**", "/js/**", "/img/**","/scss/**","/vendor/**","/public/**","/**", "/static/**","/admin/**").permitAll()
        .antMatchers("/callbackurl/**").permitAll()
        .antMatchers("/").permitAll()
        .antMatchers(HttpMethod.POST, "/login").permitAll()
        .antMatchers("/api/**").permitAll() 
        .anyRequest().authenticated();

}

【问题讨论】:

  • 您可以添加您的安全配置吗?
  • @TA 我在上面添加了安全配置
  • 它可能构成 AWS 服务之一,因为我得到了相同的结果。我假设发生了攻击,但它看起来对 AWS 托管很常见。
  • 我也有同样的问题 - 你找到原因了吗???

标签: spring spring-boot


【解决方案1】:

default 不允许将 CONNECT 作为 HTTP 方法

如果您尝试发送 TRACE 或 CONNECT,那么这将被视为禁止的 HTTP 方法,因此会抛出 RequestRejectedException 并显示消息“请求被拒绝,因为 HTTP 方法未包含在白名单中”。

尝试使用setAllowedHttpMethods添加它

您可以通过方法setAllowedHttpMethods 指定您自己的白名单来覆盖此行为。也可以通过调用 setUnsafeAllowAnyHttpMethod(boolean) 来关闭它并允许任何 HTTP 方法,但这会使您面临 HTTP 动词篡改和 XST 攻击。

【讨论】:

  • @Mesh1889 但这是有问题的(原因)错误
  • 是的,但我无法理解“CONNET”是如何被调用的,即使我没有提出任何 CONNET 请求。仅当我将应用程序部署为 .war 时才会发生这种情况
猜你喜欢
  • 2021-05-12
  • 2015-01-17
  • 2023-03-26
  • 2018-11-12
  • 2021-09-09
  • 2020-04-11
  • 1970-01-01
  • 2020-08-27
  • 2018-01-15
相关资源
最近更新 更多