WebFlux + R2DBC:如何防止恶意 REST 客户端通过缓慢响应消耗对应用程序进行 DDoSing

问题描述 投票:0回答:1

我正在为我们的下一个项目评估 Spring WebFlux + R2DBC 堆栈。考虑一下 REST 响应流的教科书代码:

@GetMapping("items")
public Flux<Item> findAll() {
    return repository.findAll();
}

存储库使用 jOOQ 执行数据库查询,但我认为这个细节与问题无关。我担心如何通过缓慢消耗 REST 响应或完全完全删除网络连接来防止 REST 客户端无限期地保持数据库连接。

如果我的数据库连接池有 20 个连接,攻击者可以触发 20 个并发 REST 调用,然后立即离线。这会使我的应用程序无响应。更糟糕的是,它会无限期地无响应,因为据我所知,Spring 6 WebFlux 默认情况下不会配置 HTTP 响应或套接字读/写超时,并且似乎没有可用的配置选项来设置这些超时。

显然,我一定是遗漏了一些东西或者误解了它是如何工作的。有人可以解释如何减轻这种风险吗?

java spring spring-webflux r2dbc
1个回答
0
投票

您可以应用其中一些与 OWASP 相关的措施,并且您可以采取一些措施来避免 DOS 或 DDOS 攻击。

例如:

  • 设置池中的连接数或根据需要减少连接数。

  • 创建读写超时,不让连接长时间处于活动状态。

  • 速率限制或背压处理。

  • 尖峰逮捕

  • 实施峰值抑制策略:为此,您可以使用像resilience4j这样的工具,它可能会切断连接以避免服务中断。 (断路器模式)。

你应该有一个像这样的配置文件:

spring:
  webflux:
    server:
      max-idle-time: 30s
      max-life-time: 60s
      max-connection-time: 30s
  r2dbc:
    pool:
      max-size: 20
server:
  reactive:
    session:
      timeout: 30s
© www.soinside.com 2019 - 2024. All rights reserved.