Obsah Bezpečnostní Politiky, a ZBYTEK volání API - jak to funguje?

0

Otázka

Já jsem najít to těžké pochopit, chyba vyvolána tím, že mé aplikace, když se snaží využít REST API.

Moje app, čistý HTML, Javascriptu pomocí jQuery, je běžící na Jetty serveru. Server má implementováno Content-Security-Policy:

Custom HTTP headers to be added to our responses: Content-Security-Policy: 
default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; 
img-src 'self' data:; style-src 'self' 'unsafe-inline'; base-uri 'self'; 
frame-ancestors 'self'; font-src 'self';frame-src 'self'|X-Frame-Options: 
SAMEORIGIN|X-Content-Type-Options: nosniff|X-XSS-Protection: 1; mode=block|
Referrer-Policy: strict-origin|Feature-Policy: 'none'|Strict-Transport-Security: 
max-age=63072000; includeSubDomains; preload

Chápu této části. Každý, kdo se snaží přístup k mé aplikace musí dodržovat tato omezení.

Nicméně, JavaScript kódu v mé aplikaci se pokusí zavolat Spring Boot REST API běží na stejném Linux VM (http://localhost:8080/... nebo http://server-host-name:8080/...). Přitom jsem si Content Security Policy violated when accessing http://localhost:8080...: content-src 'self'.Tohle mě mate. Pokusu o přístup k mé aplikace v Jetty bez dodržování bezpečnostní politiky by měly zvýšit chybu. Ale proč by to hodit chybu, když se aplikace v Jetty je volání Jara Boot API, které nemá žádné takové omezení?

Musím uvolnit Obsah Bezpečnostní Politiky, omezení na Jetty serveru? Pokud ano, tak proč?

Shrnutí:
REST API: Jaro Boot HTTP API běží na stejném Linux VM
Jetty Server: CSP omezení, jak je uvedeno výše
JavaScript aplikace na Jetty: Volání Jara Boot API

1

Nejlepší odpověď

1

Krátce: musíte přidat http://localhost:8080 k default-src směrnice.

Tl; DR;: 'self' token je zákeřná, protože jste intuitivně obdařit ho s pravomocemi, které mu nepodaří splnit.

Prohlížeče substisute na 'self' token s "n-tice původu" (režim + host_name + port_number) stránky URL z adresního řádku prohlížeče, a pak přidat nějaké CSP-specifické kouzlo:

  • umožňují ws: + host_name + ws_standard_port
  • umožňují upgrade ws: k wss: a http: k https: v CSP3-prohlížeče

Takže, co máme:

  1. Vaše aplikace používá fetch přístup Spring Boot REST API, které by měly být pokryty chybí connect-src směrnice, tedy prohlížeč používá default-src jako záložní.
  2. Prohlížeč změnit default-src 'self' k default-src http://your_domain.com:80 nebo default-src https://your_domain.com:443 (v závislosti na tom, jak načíst stránku).

Jak můžete vidět, oba tyto neumožňují http://localhost:8080. I když vlastně localhost je alias your_domain.com, ale CSP neví, a jen blokuje, protože nesoulad host_name + port_number.

Ale pokud se vám budou načítat aplikace s http://localhost:8080/your_app_path url fetch REST API bude dovoleno, protože se vztahuje 'self'

2021-11-24 05:13:32

Děkuji za vysvětlení. Byl jsem chápání tohoto pojmu zcela neprávem. Díky za objasnění
curious_brain

V jiných jazycích

Tato stránka je v jiných jazycích

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