TsgcWebSocketHTTPServer › 속성 › SecurityOptions
핸드셰이크 허용 규칙을 정의합니다. 즉, 허용된 오리진, RFC 6455 핸드셰이크 검증, HSTS 응답 헤더입니다.
property SecurityOptions: TsgcWSSecurity_Options read FSecurityOptions write SetSecurityOptions;
| Name | 기본값 | 설명 |
|---|---|---|
OriginsAllowed | "" | 브라우저 WebSocket 핸드셰이크에 허용되는 오리진의 쉼표로 구분된 화이트리스트. 비어 있으면 모든 오리진을 허용합니다. |
EnforceWebSocketVersion | True | Sec-WebSocket-Version이 13이 아닌 RFC 6455 핸드셰이크를 거부합니다. |
ValidateWebSocketKey | True | Sec-WebSocket-Key가 유효한 16바이트 base64 논스가 아닌 RFC 6455 핸드셰이크를 거부합니다. |
HSTS_Options.Enabled | False | Strict-Transport-Security 응답 헤더를 활성화합니다. 설명을 참조하십시오. |
HSTS_Options.MaxAge | 31536000 | 헤더의 max-age 지시자 값(초 단위, 기본값은 1년)입니다. SSL Labs에서 A+ 등급을 받으려면 최소 15552000(6개월)이 필요합니다. |
HSTS_Options.IncludeSubDomains | False | 헤더에 includeSubDomains를 추가합니다. 모든 서브도메인이 HTTPS로 제공되는 경우에만 활성화하십시오. |
HSTS_Options.Preload | False | 헤더에 preload를 추가합니다. 브라우저의 HSTS 프리로드 목록에 제출된 도메인에 대해서만 활성화하십시오. |
서버가 WebSocket 핸드셰이크를 수락하는 오리진을 제한하려면 OriginsAllowed를 사용하십시오. 기본적으로 모든 오리진이 허용됩니다. 비어 있지 않은 값은 화이트리스트를 활성화하며, 서버는 Origin 헤더가 일치하지 않는 연결을 닫습니다. 패턴은 포트에 와일드카드를 허용합니다(예: 단일 오리진의 경우 http://127.0.0.1:5555 또는 해당 호스트의 모든 포트를 수락하는 경우 http://127.0.0.1:*). 여러 오리진은 쉼표로 구분하십시오. OriginsAllowed를 빈 문자열로 설정하면 허용적인 기본값으로 복원됩니다.
EnforceWebSocketVersion과 ValidateWebSocketKey는 WebSocket 업그레이드 자체를 강화하며 기본적으로 활성화되어 있습니다. EnforceWebSocketVersion이 활성화되어 있으면 서버는 13 이외의 버전을 요청하는 핸드셰이크에 대해 업그레이드를 완료하는 대신 HTTP 426 Upgrade Required와 Sec-WebSocket-Version: 13 헤더로 응답합니다. ValidateWebSocketKey가 활성화되어 있으면 서버는 RFC 6455에서 요구하는 대로 Sec-WebSocket-Key가 누락되었거나 16바이트로 디코딩되는 24자 base64 값이 아닌 핸드셰이크를 HTTP 400 Bad Request로 거부합니다. 두 검사는 모두 RFC 6455 경로에만 적용되므로 레거시 Hixie76 클라이언트는 영향을 받지 않습니다. 비준수 클라이언트와 상호 운용해야 하는 경우에만 둘 중 하나를 False로 설정하십시오.
동일한 옵션을 TsgcWebSocketServer 및 http.sys 서버 TsgcWebSocketServer_HTTPAPI에서 사용할 수 있습니다. 인바운드 메시지의 크기를 제한하려면 MaxMessageSize를 참조하십시오.
HSTS_Options는 RFC 6797에 정의된 Strict-Transport-Security 응답 헤더를 제어합니다. Enabled가 True이면 TLS를 통해 전송되는 모든 HTTP/1.1 및 HTTP/2 응답에 MaxAge, IncludeSubDomains, Preload로 구성된 Strict-Transport-Security 헤더가 포함됩니다. 예를 들면 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload입니다. 이 헤더는 일반 HTTP로는 절대 전송되지 않으며, 애플리케이션이 이미 응답에 Strict-Transport-Security 헤더를 설정한 경우에는 건너뛰고, 애플리케이션이 직접 헤더를 작성하는 응답(스트리밍)에는 추가되지 않습니다. HSTS_Options는 이 구성 요소와 TsgcHTTPServer에서만 사용할 수 있으며, TsgcWebSocketServer 또는 http.sys 서버 TsgcWebSocketServer_HTTPAPI에는 영향을 미치지 않습니다.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.SecurityOptions.OriginsAllowed := 'http://127.0.0.1:*';
oServer.SecurityOptions.EnforceWebSocketVersion := true;
oServer.SecurityOptions.ValidateWebSocketKey := true;
oServer.SecurityOptions.HSTS_Options.Enabled := true;
oServer.SecurityOptions.HSTS_Options.MaxAge := 31536000;
oServer.Active := true;