TsgcWebSocketHTTPServer › Propriétés › SecurityOptions
Définit les règles d'admission du handshake : origines autorisées, validation du handshake RFC 6455, et en-têtes de réponse HSTS.
property SecurityOptions: TsgcWSSecurity_Options read FSecurityOptions write SetSecurityOptions;
| Nom | Par défaut | Description |
|---|---|---|
OriginsAllowed | "" | Liste blanche d'origines séparées par des virgules, acceptées pour les handshakes WebSocket des navigateurs. Vide autorise toutes les origines. |
EnforceWebSocketVersion | True
| Rejette un handshake RFC 6455 dont la Sec-WebSocket-Version n'est pas 13. |
ValidateWebSocketKey | True
| Rejette un handshake RFC 6455 dont la Sec-WebSocket-Key n'est pas un nonce base64 valide de 16 octets. |
HSTS_Options.Enabled | False | Active l'en-tête de réponse Strict-Transport-Security. Voir Remarques. |
HSTS_Options.MaxAge | 31536000 | Valeur en secondes pour la directive max-age de l'en-tête (la valeur par défaut est un an). SSL Labs exige au moins 15552000 (six mois) pour une note A+. |
HSTS_Options.IncludeSubDomains | False | Ajoute includeSubDomains à l'en-tête. À activer uniquement si tous les sous-domaines sont servis en HTTPS. |
HSTS_Options.Preload | False | Ajoute preload à l'en-tête. À activer uniquement pour les domaines soumis à la liste de préchargement HSTS des navigateurs. |
Utilisez OriginsAllowed pour restreindre les origines depuis lesquelles le serveur accepte les handshakes WebSocket. Par défaut toutes les origines sont autorisées ; toute valeur non vide active une liste blanche et le serveur ferme les connexions dont l'en-tête Origin ne correspond pas. Les patterns acceptent des caractères génériques pour le port (par exemple http://127.0.0.1:5555 pour une seule origine ou http://127.0.0.1:* pour accepter n'importe quel port sur cet hôte). Séparez plusieurs origines par des virgules. Définir OriginsAllowed sur une chaîne vide restaure la valeur permissive par défaut.
EnforceWebSocketVersion et ValidateWebSocketKey renforcent l'upgrade WebSocket lui-même et sont activés par défaut. Lorsque EnforceWebSocketVersion est actif, le serveur répond à un handshake qui demande une version autre que 13 par un HTTP 426 Upgrade Required et un en-tête Sec-WebSocket-Version: 13, au lieu de terminer l'upgrade. Lorsque ValidateWebSocketKey est actif, le serveur rejette par un HTTP 400 Bad Request tout handshake dont la Sec-WebSocket-Key est absente ou n'est pas une valeur base64 de 24 caractères qui se décode en 16 octets, comme l'exige RFC 6455. Les deux vérifications ne s'appliquent qu'au chemin RFC 6455, de sorte que les anciens clients Hixie76 ne sont pas affectés. Ne définissez l'une ou l'autre sur False que si vous devez interopérer avec un client non conforme.
Les mêmes options sont disponibles sur TsgcWebSocketServer et le serveur http.sys TsgcWebSocketServer_HTTPAPI. Pour borner la taille des messages entrants, voir MaxMessageSize.
HSTS_Options contrôle l'en-tête de réponse Strict-Transport-Security défini par RFC 6797. Lorsque Enabled est True, chaque réponse HTTP/1.1 et HTTP/2 envoyée sur TLS inclut un en-tête Strict-Transport-Security construit à partir de MaxAge, IncludeSubDomains et Preload, par exemple Strict-Transport-Security: max-age=31536000; includeSubDomains; preload. L'en-tête n'est jamais envoyé en HTTP simple, il est omis si l'application a déjà défini un en-tête Strict-Transport-Security sur la réponse, et il n'est pas ajouté aux réponses dont l'application écrit elle-même les en-têtes (streaming). HSTS_Options est disponible uniquement sur ce composant et sur TsgcHTTPServer ; il n'a aucun effet sur TsgcWebSocketServer ni sur le serveur 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;