Sur cette page

Qt HTTP Server Considérations relatives à la sécurité

Présentation

Qt HTTP Server propose plusieurs paramètres de configuration permettant de protéger une application contre des scénarios d’utilisation abusive, tels que des requêtes mal formées ou des accès non autorisés. Qt 6.10 a ajouté plusieurs paramètres de configuration de sécurité. Cette page résume les configurations recommandées et explique quand et comment les utiliser.

Avertissement : n’exposez pas directement Qt HTTP Server à Internet. Qt HTTP Server n’est pas protégé contre les attaques réseau.

Installations et configurations réseau

Voici différentes façons de configurer un réseau avec un Qt HTTP Server.

Pas d’accès à Internet

Idéalement, il ne devrait y avoir aucun accès à Internet. C’est la configuration la plus sûre, mais vous avez souvent besoin d’un accès à Internet. Si Qt HTTP Server est lié à localhost ou à une adresse QLocalServer, il n’accepte pas les connexions provenant d’Internet. Si plusieurs clients sont connectés à 127.0.0.1, les connexions sont comptabilisées dans le nombre de connexions par hôte, ce qui affecte la fonction setMaximumConnectionsPerHost(). Par défaut, aucune limite de connexions par hôte n’est définie.

Liaison à QSslServer sur Internet

Il est possible, mais non pris en charge, de lier le serveur Qt HTTP Server à une adresse QSslServer liée à une interface réseau accessible depuis Internet. Malgré toutes les options disponibles dans QHttpServerConfiguration, cette configuration n’est pas prise en charge car Qt HTTP Server n’est pas suffisamment sécurisé.

Configuration de l’application

Si vous utilisez un pool de threads, assurez-vous qu’il ne soit pas trop volumineux, au risque que le serveur ne puisse pas gérer simultanément les requêtes entrantes gourmandes en ressources. Bien que l’appel route() facilite l’analyse de l’URL dans les requêtes HTTP, il incombe au développeur de gérer la validation des entrées.

Qt HTTP Server Configuration de sécurité

Configurez Qt HTTP Server via la classe QHttpServerConfiguration. Ajustez les limites en fonction des capacités de votre plateforme et de la configuration de votre réseau.

Limites de débit

  • Configurez le nombre maximal de requêtes par seconde par adresse IP client à l’aide de setRateLimitPerSecond(). Par défaut, il n’y a pas de limite de débit. Lorsque la limite est dépassée, le serveur renvoie le code d’état 429 (Too Many Requests).
  • Configurez le nombre maximal de connexions simultanées à l'aide de setMaximumConnections(). Par défaut, il n'y a pas de limite de connexions. Lorsque la limite est dépassée, le serveur renvoie le code d'état 429 (Too Many Requests) et la connexion est fermée.
  • Configurez le nombre maximal de connexions simultanées par adresse IP de client à l’aide de la méthode setMaximumConnectionsPerHost(). Par défaut, il n’y a pas de limite. Lorsque la limite est dépassée, le serveur renvoie le code d’état 429 (Too Many Requests) et la connexion est fermée.

Limites de connexion

  • Configurez la durée maximale d’inactivité pour les connexions « keep-alive » à l’aide de ` setKeepAliveTimeout()`. Par défaut, le délai d’expiration est de 15 secondes.

Listes d’autorisation et de refus

  • Configurez la liste des sous-réseaux clients autorisés à accéder au serveur à l’aide de setWhitelist(). Par défaut, la liste blanche est vide et tous les clients sont autorisés. Si la liste blanche n’est pas vide, seules les adresses figurant dans cette liste sont acceptées. La liste blanche est vérifiée avant la liste noire.
  • Configurez les sous-réseaux clients refusés à l’aide de la fonction ` setBlacklist()`. La liste noire n’est appliquée que lorsque la liste blanche est vide. Par défaut, la liste noire est vide.

Limites de taille des requêtes

  • Configurez la taille maximale de l'URL à l'aide de ` setMaximumUrlSize()`. Si la limite est dépassée, le serveur renvoie le code d'état HTTP 414 (Request-URI Too Long). La taille maximale par défaut de l'URL est de 64 KiB.
  • Configurez la taille totale maximale de tous les en-têtes de requête HTTP à l’aide de setMaximumTotalHeaderSize(). Si la limite est dépassée, le serveur renvoie le code d’état HTTP 431 (Request Header Fields Too Large). La taille totale par défaut des en-têtes est de 64 KiB.
  • Configurez la taille maximale d’un champ d’en-tête HTTP à l’aide de ` setMaximumHeaderFieldSize()`. Si la limite est dépassée, le serveur renvoie le code d’état HTTP 431 (Champs d’en-tête de la requête trop volumineux). La taille maximale par défaut d’un champ d’en-tête est de 48 KiB.
  • Configurez le nombre maximal de champs d’en-tête HTTP par requête à l’aide de la fonction setMaximumHeaderFieldCount(). Si la limite est dépassée, le serveur renvoie le code d’état HTTP 431 (Champs d’en-tête de la requête trop volumineux). Le nombre maximal de champs d’en-tête par défaut est de 128.
  • Configurez la taille maximale du corps de la requête à l'aide de la fonction ` setMaximumBodySize()`. Si la limite est dépassée, le serveur renvoie le code d'état HTTP 413 (Contenu trop volumineux). La taille maximale par défaut du corps est de 32 Mio.

Remarque : utiliseztoujours les dernières mises à jour de sécurité pour Qt et toutes les bibliothèques dépendantes.

© 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.