Zawiesza połączenia z websocket po dodaniu polityki bezpieczeństwa treści w nginx

0

Pytanie

Chcę dodać nową politykę bezpieczeństwa zawartości nagłówka w swój nginx conf w celu zwiększenia bezpieczeństwa. Dodałem wszystkie zewnętrzne źródła, i wszystko działa normalnie, za wyjątkiem czat-bota, który jest infobip. Wykorzystuje protokół wss, i z jakiegoś powodu nie mogę znaleźć odpowiedni sposób, aby jego ustawienia.

Jest to błąd, który mam.

I to jest mój tytuł w nginx.conf

add_header 'content-security-policy "domyślnie-src i 'samo' 'niebezpieczne-inline' SUN: BCC://.infobip.com z WS://.infobip.com .infobip.com http://www.w3.org https://fonts.googleapis.com https://stackpath.bootstrapcdn.com .youtube.com https://cdn.jsdelivr.net/; w img src i " ja " informacje oryginał: https://.openstreetmap.org BCC://czat-pt.инфобип.com/czat/sieć/serwer proxy/827/toxgylwd/WebSocket, która zawsze; połączenie-FLC "ja", NIEDZ: IZ: BCC://.infobip.com z WS://*.infobip.com .infobip.com protokół HTTPS://.doubleclick.net BCC://czat-pt.инфобип.com/czat/sieć/serwer proxy/492/hybzmnjl/z WebSocket 'niebezpieczne-rzędowy zawsze;";

Próbowałem wiele sposobów, aby zezwolić na połączenie z websocket, ale wydaje się, że ani jeden z nich nie działa.

2
0

Ponieważ każde połączenie z websocket zaczyna się od zwykłego żądania http, należy dodać CSP dla https://your-websocket-server-domain:port

Na żądanie http otrzymasz odpowiedź z 101: swtiching protocols i wtedy połączenie będzie połączeniem WebSocket.

Należy pamiętać, że nie sądzę, że dyrektywa ws: lub wss: csp w ogóle wymagane.

2021-11-20 14:15:38
0

Masz 3 problemy:

  1. Błędy konsoli, które wykazały, że nie są związane z CSP. "403 Zabronione" oznacza, że nie masz dostępu do odpowiedniego adresu URL. "Opcje X-klatki ", aby "zablokować" oznacza, że próbujesz wdrożyć iframe, ale ta strona uniemożliwia osadzanie przez X-Frame-Options: "DENY" Nagłówek HTTP.

  2. Nieprawidłowy format Nginx add_header. To powinno wyglądać tak (zwróć uwagę na cytaty - always słowo kluczowe powinno być czerpie z ustawień CSP):

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

  3. Nieprawidłowy format hosta źródeł CSP. Host-źródła, takie jak .youtube.com nie może zawierać ołowiu . punkt:
    youtube.com pozwoli na pobieranie zasobów z http(s)://youtube.com i *.youtube.com pozwoli korzystać z zasobów z subdomen youtube.com.

W ten sposób poprawny syntaktycznie CSP powinien wyglądać w następujący sposób:

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;

Należy pamiętać, że:

  • wss://livechat-fr.infobip.com/czat/web/proxy/492/hybzmnjl/websocket - nie podawaj gruby drogę-część CSP, bo on zmienia się za każdym razem.
  • Schemat źródła, takie jak wss: obejmuje wszelkie hosta źródła z tym schematem (np. wss://site.com/websocket). Dlatego usunąłem źródła schematu i zostawił źródła hosta.
  • Usunąłem kilka nieobsługiwane źródła, np. 'unsafe-inline' w connect-src.
  • Nginx musi obsługiwać backslash \ jak podział wiersza, więc użyłem go, bo trudno utrzymać CSP w jednej linii. Sprawdź, czy twoja wersja Nginx tę funkcję.

Uwaga 2: Ta CSP może blokować niektóre źródła - wystarczy dodać je w odpowiednie dyrektywy.

Uwaga 3: należy Rozważyć możliwość przenoszenia źródeł z default-src dyrektywa dla script-src + style-src + font-src wytyczna. Bo teraz naprawdę pozwalasz 'unsafe-inline' w scrit-src w ten sposób twój CSP nie chroni przed XSS. W przyszłości również będzie trudno zarządzać CSP, ponieważ źródła mieszane w jednej dyrektywie.

2021-11-28 23:35:39

Dziękuję, ale, niestety, nadal pojawia się ten sam błąd - połączenie z WebSocket ... nie udało się. Ja również otrzymuję: Odmowa wyświetlania 'livechat-fr.infobip.com" w kadrze, bo on ustanowił "Ustawienia X-klatki" w "zakazać". Tak właśnie ustawiłem tytuł add_header 'X-Ustawienia kadru' "zawsze ten SAM";
Baseplate

Zainstalowałeś X-Frame-Options "SAMEORIGIN" na swoim serwerze, ale livechat-fr.infobip.com zablokowany nie jest obsługiwany przez twój serwer. To livechat-fr.infobip.com publikuje X-Frame-Options "DENY" tytuł aby uniknąć osadzania. Być może masz nieprawidłowo skonfigurowane coś w swoim infobip.com Konto.
granty

Problem rozwiązany. Dyrektywa CSP działa normalnie. Okazało się, że korporacyjna sieć blokuje ruch z/na infobip, i mnie o tym nie poinformowano. Jeszcze raz dziękuję ci za twoje wysiłki, które i tak nie pomogły mi ustalić sztywną dyrektywę.
Baseplate

W innych językach

Ta strona jest w innych językach

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