我们的项目存在安全问题。攻击者可以拦截登录请求并修改其中的“主机”标头。服务器将响应重定向(303),将用户发送到可能是邪恶的站点。
是否可以为重定向添加白名单?
在嵌入式tomcat中使用Spring-boot,在生产环境中,这一切都将落在负载均衡器之后。
@Override
protected void configure(HttpSecurity http) throws Exception {
http //@formatter:off
.formLogin()
.loginProcessingUrl("...")
.usernameParameter("...")
.passwordParameter("...")
.loginPage("/").permitAll()
.successHandler(authenticationSuccessHandler)
.failureHandler(authenticationFailureHandler)
.and().logout().permitAll()
.logoutSuccessHandler(logoutSuccessHandler)
.deleteCookies(XSRF_TOKEN, JSESSIONID)
.and().authorizeRequests()
.antMatchers("...").permitAll().anyRequest().authenticated()
.and().csrf().csrfTokenRepository(csrfTokenRepository)
.and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);//@formatter:on
}
到目前为止,我已尝试过以下内容:
TomcatEmbeddedServletContainerFactory
并在那里添加一个Valve。FilterRegistrationBean
并使用RemoteAddrFilter.setDeny()
。1°选项根本不会启动。我显然在某个地方犯了错误,但这些信息很难找到,而且我无法全面了解该怎么做。
我在Stackoverflow
找到了2°选项,感觉这是正确的选择,但是我没能让它发挥作用。如果setDeny()
存在,则甚至不允许我进入我的网站。如果我发表评论,那么看起来根本就没有过滤。豆看起来像这样:
@Bean
public FilterRegistrationBean remoteAddressFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
RemoteAddrFilter filter = new RemoteAddrFilter();
filter.setDeny("attacker/.com.*");
filter.setDenyStatus(404);
filterRegistrationBean.setFilter(filter);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
提前感谢您提供任何帮助。