이 페이지에서

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(Too Many Requests)를 반환합니다.
  • setMaximumConnections()을 사용하여 최대 동시 연결 수를 구성하십시오. 기본적으로 연결 제한은 없습니다. 제한을 초과하면 서버는 상태 코드 429(Too Many Requests)를 반환하고 연결이 종료됩니다.
  • setMaximumConnectionsPerHost()를 사용하여 클라이언트 IP당 최대 동시 연결 수를 구성합니다. 기본적으로 제한이 없습니다. 제한을 초과하면 서버는 상태 코드 429(Too Many Requests)를 반환하고 연결이 종료됩니다.

연결 제한

  • setKeepAliveTimeout()를 사용하여 Keep-Alive 연결의 최대 유휴 시간을 설정합니다. 기본적으로 타임아웃은 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()를 사용하여 단일 HTTP 헤더 필드의 최대 크기를 구성할 수 있습니다. 제한을 초과하면 서버는 HTTP 상태 코드 431(Request Header Fields Too Large)로 응답합니다. 기본 최대 헤더 필드 크기는 48 KiB입니다.
  • setMaximumHeaderFieldCount()를 사용하여 요청당 HTTP 헤더 필드의 최대 개수를 설정합니다. 제한을 초과하면 서버는 HTTP 상태 코드 431(Request Header Fields Too Large)로 응답합니다. 기본 최대 헤더 필드 개수는 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.