Connexion websocket échoue suite à l'ajout de Contenu de la Politique de Sécurité dans nginx

0

La question

Je veux ajouter un nouvel en-tête Content-Security-policy pour ma conf nginx afin d'améliorer la sécurité. J'ai ajouté toutes les sources externes et tout fonctionne bien sauf pour le chatbot qui est infobip. Il utilise wss protocole, et pour une raison que je ne peux pas trouver la bonne façon de le configurer.

C'est l'erreur que je reçois.

Et c'est mon l'en-tête de nginx.conf

add_header 'Content-Security-policy' "default-src 'auto' "dangereux-inline' wss: wss://.infobip.com ws://.infobip.com .infobip.com http://www.w3.org https://fonts.googleapis.com https://stackpath.bootstrapcdn.com .youtube.com https://cdn.jsdelivr.net/; img src "self" de données: https://.openstreetmap.org wss://livechat-fr.infobip.com/chat/web/proxy/827/toxgylwd/websocket toujours; connectez-src 'auto' wss: ws: wss://.infobip.com ws://*.infobip.com .infobip.com https://.doubleclick.net wss://livechat-fr.infobip.com/chat/web/proxy/492/hybzmnjl/websocket "dangereux-inline' toujours;";

J'ai essayé de nombreuses façons pour permettre la connexion websocket mais aucune ne semble fonctionner.

2
0

Puisque chaque connexion websocket commencer par un régulier de la requête http, vous devez ajouter un CSP pour https://your-websocket-server-domain:port

La requête http ne sera répondu avec un 101: swtiching protocols et puis la connexion deviendra une connexion WebSocket.

Notez que je ne pense pas que le ws: ou wss: csp directive est nécessaire à tous.

2021-11-20 14:15:38
0

Vous avez 3 questions:

  1. Les erreurs de la Console vous sont non CSP-liés. "403 Forbidden" signifie que vous n'avez pas accès à des Url. "'X-Frame-Options "pour" refuser "" signifie que vous essayez d'intégrer des iframe mais cette page n'autorise pas l'incorporation par X-Frame-Options: "DENY" L'en-tête HTTP.

  2. Mauvais format de Nginx add_header. Il devrait ressembler à (attention aux guillemets - always mot-clé doit être placé en dehors de la CSP paramètres):

    add_header Content-Security-Policy "default-src 'self'..." always;

  3. Mauvais format de la CSP de l'hôte-sources. L'hôte de sources telles que .youtube.com ne doit pas contenir l'un des principaux . dot:
    youtube.com permettra de charger les ressources à partir de l'adresse http(s)://youtube.com et *.youtube.com permettra des ressources du sous-domaines de youtube.com.

Donc, votre point de vue syntaxique correcte CSP devrait ressembler à:

add_header Content-Security-Policy "\
default-src 'self' 'unsafe-inline' https://stackpath.bootstrapcdn.com\
https://fonts.googleapis.com infobip.com ws://infobip.com wss://infobip.com youtube.com\
https://cdn.jsdelivr.net http://www.w3.org;\
connect-src 'self' infobip.com wss://infobip.com ws://*.infobip.com\
wss://livechat-fr.infobip.com/chat/web/proxy/ https://doubleclick.net;\
img-src 'self' data: https://openstreetmap.org;\
" always;

Notez que:

  • wss://livechat-fr.infobip.com/chat/web/proxy/492/hybzmnjl/websocket - ne pas inclure les gras chemin-partie de la pcs, parce que c'est changé à chaque fois.
  • Le régime de sources telles que wss: couvre toute l'hôte sources avec ce régime (par exemple wss://site.com/websocket). J'ai donc supprimé le régime des sources et à gauche de l'hôte-sources.
  • J'ai supprimé certaines sources non pris en charge, par exemple 'unsafe-inline' dans le connect-src.
  • Nginx devrait prendre en charge une barre oblique inverse \ comme saut de ligne, je l'ai donc utilisé car il est difficile de maintenir la CSP dans une ligne. Vérifiez votre version de Nginx prend en charge cette fonctionnalité.

Note 2: le Présent DSP peut bloquer certaines sources - il suffit de les ajouter à la directives appropriées.

Note 3: Envisager de déplacer les sources de l' default-src la directive de l' script-src + style-src + font-src les directives. Parce que pour l'instant vous permet en fait 'unsafe-inline' dans le scrit-src si votre CSP ne protège pas contre les attaques de type XSS. Il sera également difficile à gérer CSP dans l'avenir, puisque les sources sont mélangés dans une directive.

2021-11-28 23:35:39

Merci, mais malheureusement, je reçois toujours le même message d'erreur - connexion WebSocket à ... a échoué. Je reçois aussi: Refusé d'affichage"livechat-fr.infobip.com"dans un cadre, car il set 'X-Frame-Options "pour " refuser". C'est la façon dont j'ai mis en place l'en-tête add_header 'X-Frame-Options ""SAMEORIGIN" toujours;
Baseplate

Vous définissez X-Frame-Options "SAMEORIGIN" sur votre serveur, mais livechat-fr.infobip.com bloqué n'est pas servi par le serveur. C'est livechat-fr.infobip.com publie X-Frame-Options "DENY" l'en-tête pour empêcher l'incorporation. Vous pouvez avoir mal configuré quelque chose dans votre infobip.com compte.
granty

Le problème est résolu. Le CSP directive fonctionne très bien. Il s'est avéré que le réseau de l'entreprise a été le blocage de la circulation à partir de/à infobip et je n'avais pas été informé de cela. Merci encore pour vos efforts, encore m'a aidé à définir la directive difficile.
Baseplate

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................