TIdHttpServer和套接字超时

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

我有一个使用TIdHttpServer的应用程序。如何为写消息缓慢的套接字设置超时时间?

最近对我的应用程序进行的安全扫描显示了一些与连接到Web服务器的客户端有关的漏洞。主要漏洞是发送到服务器的慢速请求的客户端没有被丢弃。为了解决此问题,我在服务器的OnConnect事件中向客户端连接添加了ReadTimeout。

procedure TForm1.IdHTTPServer1Connect(AContext: TIdContext);
begin
  AContext.Connection.Socket.ReadTimeout := 15000;
end;

添加此更改后,更新的安全扫描显示服务器在接受来自客户端的数据包后重置超时。为了解决此问题,我试图提出一种为套接字建立写超时的方法,而不是所示的ReadTimeout。换句话说,我不希望套接字写数据刷新控制断开连接的超时。能做到吗?

sockets delphi timeout indy httpserver
1个回答
0
投票

ReadTimeout适用于每次尝试从连接读取字节的尝试。每次读取都使用完整的超时。将其视为per-byte超时。

TIdHTTPServer中目前没有per-request超时来限制读取complete HTTP请求所允许的时间。

要获得类似的内容,请尝试以下操作:

  • 设置TIdHTTPServer.KeepAlive=False(因为当TIdHTTPServer时新的HTTP请求开始时KeepAlive=True没有事件)

  • OnConnect事件中,设置ReadTimeout并启动计时器

  • OnCommand...事件中停止计时器

  • 如果计时器过去,请关闭套接字连接。

© www.soinside.com 2019 - 2024. All rights reserved.