TsgcWebSocketHTTPServer › プロパティ › SecurityOptions
ハンドシェイクの受け入れルールを定義します。許可されるオリジン、RFC 6455ハンドシェイク検証、およびHSTSレスポンスヘッダーです。
property SecurityOptions: TsgcWSSecurity_Options read FSecurityOptions write SetSecurityOptions;
| 名前 | デフォルト | 説明 |
|---|---|---|
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プリロードリストに登録済みのドメインでのみ有効にしてください。 |
OriginsAllowed を使用して、サーバーが WebSocket ハンドシェイクを受け入れるオリジンをロックダウンします。デフォルトではすべてのオリジンが許可されています。空でない値を設定するとホワイトリストが有効になり、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;