TsgcWebSocketHTTPServer › 属性 › SecurityOptions

SecurityOptions 属性

定义握手准入规则:允许的来源、RFC 6455 握手验证和 HSTS 响应标头。

语法

property SecurityOptions: TsgcWSSecurity_Options read FSecurityOptions write SetSecurityOptions;

成员

名称默认描述
OriginsAllowed""为浏览器 WebSocket 握手接受的来源的逗号分隔白名单。为空则允许所有来源。
EnforceWebSocketVersionTrue拒绝其 Sec-WebSocket-Version 不是 13 的 RFC 6455 握手。
ValidateWebSocketKeyTrue拒绝其 Sec-WebSocket-Key 不是有效的 16 字节 base64 随机数的 RFC 6455 握手。
HSTS_Options.EnabledFalse启用 Strict-Transport-Security 响应标头。请参阅备注。
HSTS_Options.MaxAge31536000标头 max-age 指令的值(以秒为单位,默认值为一年)。SSL Labs 要求至少为 15552000(六个月)才能获得 A+ 评级。
HSTS_Options.IncludeSubDomainsFalse在标头中添加 includeSubDomains。仅当所有子域均通过 HTTPS 提供服务时才启用。
HSTS_Options.PreloadFalse在标头中添加 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 处于活动状态时,对于 Sec-WebSocket-Key 缺失或不是按 RFC 6455 要求解码为 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;

返回属性