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 あたり 1 秒あたりの最大リクエスト数を設定します。デフォルトでは、レート制限はありません。制限を超えた場合、サーバーはステータスコード 429 (Too Many Requests) で応答します。
- setMaximumConnections() を使用して、同時接続の最大数を設定します。デフォルトでは、接続制限はありません。制限を超えた場合、サーバーはステータスコード 429 (Too Many Requests) を返して応答し、接続は切断されます。
- setMaximumConnectionsPerHost() を使用して、クライアント IP ごとの同時接続数の上限を設定します。デフォルトでは制限はありません。制限を超えると、サーバーはステータスコード 429 (Too Many Requests) を返して応答し、接続は切断されます。
接続制限
- setKeepAliveTimeout() を使用して、キープアライブ接続の最大アイドル時間を設定します。デフォルトでは、タイムアウトは 15 秒です。
許可リストと拒否リスト
- setWhitelist() を使用して、サーバーへのアクセスが許可されるクライアントサブネットのリストを設定します。デフォルトでは、許可リストは空であり、すべてのクライアントが許可されます。許可リストが空でない場合、このリストに含まれるアドレスのみが受け入れられます。許可リストは拒否リストよりも先にチェックされます。
- setBlacklist() を使用して、アクセスを拒否するクライアントサブネットを設定します。拒否リストは、許可リストが空の場合にのみ適用されます。デフォルトでは、拒否リストは空です。
リクエストサイズの制限
- setMaximumUrlSize() を使用して、URL の最大サイズを設定します。制限を超えた場合、サーバーは HTTP ステータスコード 414 (Request-URI Too Long) で応答します。デフォルトの URL 最大サイズは 64 KiB です。
- setMaximumTotalHeaderSize() を使用して、すべての HTTP リクエストヘッダーの合計最大サイズを設定します。制限を超えた場合、サーバーは HTTP ステータスコード 431 (Request Header Fields Too Large) で応答します。デフォルトのヘッダー合計サイズは 64 KiB です。
- setMaximumHeaderFieldSize() を使用して、1つのHTTPヘッダーフィールドの最大サイズを設定します。制限を超えた場合、サーバーはHTTPステータスコード431(Request Header Fields Too Large)で応答します。デフォルトのヘッダーフィールドの最大サイズは48 KiBです。
- setMaximumHeaderFieldCount() を使用して、リクエストあたりの HTTP ヘッダーフィールドの最大数を設定します。制限を超えた場合、サーバーは HTTP ステータスコード 431 (Request Header Fields Too Large) で応答します。デフォルトのヘッダーフィールドの最大数は 128 です。
- setMaximumBodySize() を使用して、リクエストボディの最大サイズを設定します。この制限を超えた場合、サーバーは HTTP ステータスコード 413(Content Too Large)で応答します。デフォルトの最大ボディサイズは 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.