TsgcHTTPServer › 属性 › SecurityOptions

SecurityOptions 属性

握手准入规则继承自共享服务器引擎;握手检查仅适用于 WebSocket 升级路径,因此永远不会在此组件上触发,但 HSTS_Options 确实适用于此组件(请参阅备注)。

语法

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 预加载列表的域名启用。

备注

SecurityOptions 未经修改地继承自同样支撑 TsgcWebSocketHTTPServer 的共享服务器引擎,在该引擎中 OriginsAllowed、EnforceWebSocketVersion 和 ValidateWebSocketKey 用于把守 WebSocket 升级握手。TsgcHTTPServer 从不执行 WebSocket 握手,因此这三项检查都不会在此组件上运行:每个请求都由普通 HTTP 路径处理(OnCommandGet / OnCommandOther / DocumentRoot)。这三个成员仍保持已发布状态,以便与共享引擎保持接口兼容;请将它们保留为默认值。若要限制哪些客户端 IP 可以访问某个 HTTP 端点,请使用 Firewall 或 RateLimiter,或在 OnBeforeCommand 中自行检查 Origin 标头。

HSTS_Options 是例外:它确实适用于此组件。它控制 RFC 6797 定义的 Strict-Transport-Security 响应标头。当 Enabled 为 True 时,通过 TLS 发送的每个响应都会包含由 MaxAge、IncludeSubDomains 和 Preload 构建的 Strict-Transport-Security 标头,例如 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload。该标头不会通过明文 HTTP 发送,如果应用程序已在响应上设置了 Strict-Transport-Security 标头,则会跳过发送;对于应用程序自行写入标头的响应(流式传输),也不会添加该标头。HSTS_Options 仅在本组件和 TsgcWebSocketHTTPServer 上可用;对 TsgcWebSocketServer 或 http.sys 服务器 TsgcWebSocketServer_HTTPAPI 没有影响。

示例

OriginsAllowed、EnforceWebSocketVersion 和 ValidateWebSocketKey 展示以求完整;它们对 TsgcHTTPServer 没有可观察到的效果。HSTS_Options.Enabled 和 HSTS_Options.MaxAge 则确实有效果:它们会为通过 TLS 发送的响应添加 Strict-Transport-Security 标头。


oServer := TsgcHTTPServer.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;

返回属性