Qt HTTP Server 安全注意事项
概述
Qt HTTP Server 提供了若干配置选项,以帮助应用程序防范滥用场景,例如格式错误的请求或未经授权的访问。Qt 6.10 新增了若干安全配置选项。本页总结了推荐的配置方案,并说明了何时以及如何使用它们。
警告:请 勿将Qt HTTP Server 直接暴露在互联网上。Qt HTTP Server 尚未针对网络攻击进行加固。
网络设置与配置
以下是使用Qt HTTP Server 设置网络的几种方法。
无互联网访问
理想情况下,应完全不访问互联网。这是最安全的设置,但您通常需要互联网访问。如果Qt HTTP Server 绑定到 localhost 或QLocalServer ,则它不会接受来自互联网的连接。 如果有多个客户端连接到 127.0.0.1,这些连接会被计入“每主机连接数”,并影响setMaximumConnectionsPerHost() 的执行。默认情况下,未设置每主机连接数限制。
绑定到互联网上的 QSslServer
虽然可以将Qt HTTP Server 绑定到一个可从互联网访问的网络接口上的QSslServer ,但此操作不受支持。尽管QHttpServerConfiguration 中提供了各种选项,但由于Qt HTTP Server 的安全性不足,因此不支持这种配置。
应用程序配置
如果使用线程池,请确保其规模不要过大,以免服务器无法处理同时发生的、资源密集型传入请求。尽管route() 调用使从 HTTP 请求的 URL 中解析信息变得容易,但处理输入验证是开发人员的责任。
Qt HTTP Server 安全配置
请通过QHttpServerConfiguration 类配置Qt HTTP Server 。请根据您平台的能力和网络设置调整限制。
速率限制
- 使用setRateLimitPerSecond() 配置每个客户端 IP 每秒的最大请求数。默认情况下,不存在速率限制。当超过限制时,服务器将返回状态码 429(请求过多)。
- 使用 `setMaximumConnections()` 配置最大并发连接数。默认情况下,没有连接限制。当超过限制时,服务器将返回状态码 429(请求过多),并关闭连接。
- 使用setMaximumConnectionsPerHost() 配置每个客户端 IP 的最大并发连接数。默认情况下,没有限制。当超过限制时,服务器将返回状态码 429(请求过多),并关闭连接。
连接限制
- 使用setKeepAliveTimeout() 配置保持活动连接的最大空闲时间。默认超时时间为 15 秒。
白名单和黑名单
- 使用setWhitelist() 配置允许访问服务器的客户端子网列表。默认情况下,白名单为空,所有客户端均被允许访问。如果白名单不为空,则仅接受该列表中的地址。系统会先检查白名单,再检查黑名单。
- 使用setBlacklist() 配置被拒绝的客户端子网。仅当白名单为空时,才会应用黑名单。默认情况下,黑名单为空。
请求大小限制
- 使用setMaximumUrlSize() 配置最大 URL 长度。如果超过限制,服务器将返回 HTTP 状态码 414(Request-URI Too Long)。默认最大 URL 长度为 64 KiB。
- 使用setMaximumTotalHeaderSize() 配置所有 HTTP 请求头部的最大总大小。如果超过限制,服务器将返回 HTTP 状态码 431(请求头部字段过大)。默认的头部总大小为 64 KiB。
- 使用setMaximumHeaderFieldSize() 配置单个 HTTP 标头字段的最大大小。如果超出限制,服务器将返回 HTTP 状态码 431(请求标头字段过大)。默认的最大标头字段大小为 48 KiB。
- 使用setMaximumHeaderFieldCount() 配置每个请求中 HTTP 标头字段的最大数量。如果超过限制,服务器将返回 HTTP 状态码 431(请求标头字段过大)。默认的最大标头字段数量为 128。
- 使用 `setMaximumBodySize()` 配置请求正文的最大大小。如果超过限制,服务器将返回 HTTP 状态码 413(内容过大)。默认的最大正文大小为 32 MiB。
注意:请务必 为 Qt 及所有依赖库安装最新的安全更新。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.