如何在spring boot和嵌入式tomcat中设置mod_reqtimeout?

时间:2018-05-26 04:54:10

标签: spring spring-boot tomcat embedded-tomcat-8

我有使用嵌入式tomcat的spring启动应用程序,我想设置mod_reqtimeout以防止慢速http dos攻击。如何在弹簧启动配置中设置或初始化此模块?

acunetix显示此警告:

您的网络服务器容易受到慢速HTTP DoS(拒绝服务)攻击。 Slowloris和慢速HTTP POST DoS攻击依赖于这样一个事实,即HTTP协议在设计之前需要服务器在处理之前完全接收请求。如果HTTP请求未完成,或者传输速率非常低,则服务器会使其资源忙于等待其余数据。如果服务器保持太多资源忙,则会产生拒绝服务。

当我用谷歌搜索这个警告时,我发现应该设置mod_reqtimeout,如下所示:

https://httpd.apache.org/docs/trunk/mod/mod_reqtimeout.html

2 个答案:

答案 0 :(得分:0)

我通过注入下面的bean并设置连接器的连接超时来解决问题:

@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();

    factory.addConnectorCustomizers(connector ->
            ((AbstractProtocol) connector.getProtocolHandler()).setConnectionTimeout(8000));

    return factory;
}

答案 1 :(得分:0)

在Spring Boot 1.4或更高版本中,可以使用以下命令在应用程序属性中进行配置:

set hive.variable.substitute=true;
SET run_dt = '2012-09-16';
  

连接器在关闭连接之前等待另一个HTTP请求的时间。如果未设置,则使用连接器的特定于容器的默认值。使用值-1表示没有超时(即无限)。

来源:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html