Mixed content – požadavek na http

Rndoom04
Člen | 75
+
0
-

Zdravíčko,
moc prosím o pomoc. Potřebuji posílat requesty na API, které běží na nezabezpečeném HTTP protokolu. Bohužel však nemohu použít PHP, ale musím přes AJAX (API server běží na localhostu), takže se k němu dostane jen zařízení, které je připojené ke stejné síti. Avšak prohlížeč hlásí blocked mixed content.

Dohledal jsem něco okolo CSR, ale vůbec se mi ho nedaří nastavit.

Jedná se o propojení platebního terminálu k e-shopu. Tzn. z administrace e-shopu by ho měl umět na stejné síti ovládat PC, popřípadě i mobil bez přenastavování prohlížeče.

Mohli byste mi prosím poradit jak to ideálně vyřešit? Moc děkuji za pomoc. :)

Marek Bartoš
Nette Blogger | 1249
+
+2
-

Zprovoznit https by byla nejrozumnější možnost.

V Content-Security-Policy se dá nastavit upgrade-insecure-requests, aby se automaticky použilo https tam, kde se uvádí http. Ale jestli server https nepovoluje, tak ti to nepomůže.

Jediná možnost jak ti prohlížeč mixed content dovolí je povolit ho ve vývojářských nástrojích, což je na produkci nepoužitelné.

Takže máš jen dvě možnosti, pokud se http nezbavíš.
Buď mít stránku ze které děláš requesty na http též na http,
nebo mít na síti proxy server, který na https poběží a bude requesty přeposílat.

Editoval Marek Bartoš (4. 7. 12:57)

Rndoom04
Člen | 75
+
0
-

Marek Bartoš napsal(a):

Zprovoznit https by byla nejrozumnější možnost.

V Content-Security-Policy se dá nastavit upgrade-insecure-requests, aby se automaticky použilo https tam, kde se uvádí http. Ale jestli server https nepovoluje, tak ti to nepomůže.

Jediná možnost jak ti prohlížeč mixed content dovolí je povolit ho ve vývojářských nástrojích, což je na produkci nepoužitelné.

Takže máš jen dvě možnosti, pokud se http nezbavíš.
Buď mít stránku ze které děláš requesty na http též na http,
nebo mít na síti proxy server, který na https poběží a bude requesty přeposílat.

Děkuji za odpověď. Trochu jsem si to myslel. To je opravdu nastavení terminálu tak „těžké“, že se musí vymýšlet workaroundy ve formě proxy nebo nastavování prohlížeče? Mám ho totiž od platební společnosti půjčený a trochu mě to zaráží no. :/

Myslíš, že to známý e-shopový krabicák taky řeší přes proxy? Totiž, když vím, jací technici ti klienti jsou, tak to musí být pro ně co nejjednodušší.

Editoval Rndoom04 (4. 7. 13:14)

David Grudl
Nette Core | 8206
+
+2
-

Ahoj! Problém se smíšeným obsahem (mixed content), který popisuješ, se objevuje, když se snažíš načítat nezabezpečený HTTP obsah na stránce, která je sama zabezpečená HTTPS. Moderní prohlížeče to často blokují kvůli bezpečnosti.

Zde je několik možností, jak můžeš tento problém vyřešit:

  1. Přejít na HTTPS: Nejjednodušší a nejbezpečnější řešení je použít HTTPS i pro API, které běží na localhostu. To můžeš udělat tak, že si nastavíš SSL certifikát pro svůj lokální server. Pro vývojové účely můžeš použít nástroje jako Let's Encrypt pro skutečný certifikát, nebo mkcert pro vytvoření důvěryhodného certifikátu pro lokální vývoj.
  2. Reverse Proxy: Pokud nemůžeš měnit konfiguraci API serveru k používání HTTPS, můžeš použít reverse proxy server, který bude přijímat HTTPS spojení a přesměrovávat je na tvůj HTTP server. Nginx je oblíbená volba pro tento účel. Reverse proxy by přijímal HTTPS požadavky a přesměrovával je na tvůj lokální HTTP server.
  3. Výjimky v prohlížeči: Méně bezpečnou, ale někdy praktickou možností je přidání výjimky v prohlížeči pro konkrétní stránky, aby povolily nezabezpečený obsah. Toto by však mělo být používáno pouze jako dočasné řešení, protože snižuje celkovou bezpečnost komunikace.
  4. Lokální vývojové nástroje: Pokud pracuješ pouze v lokálním vývojovém prostředí, můžeš použít nástroje jako ngrok, které ti umožní zveřejnit tvé lokální servery na internetu s HTTPS.
  5. Content Security Policy (CSP): Toto je zabezpečení, které ti umožňuje definovat, jaký obsah může být načítán na tvé stránce. CSP může být užitečné pro kontrolu různých aspektů bezpečnosti, ale v tvém případě to nevyřeší problém smíšeného obsahu přímo. CSP spíše zabraňuje rizikům spojeným s některými typy útoků, jako je cross-site scripting.

Doporučuji začít s implementací HTTPS pro tvé API. To nejenže vyřeší problém smíšeného obsahu, ale také zvýší celkovou bezpečnost tvého systému.

Rndoom04
Člen | 75
+
0
-

David Grudl napsal(a):

Ahoj! Problém se smíšeným obsahem (mixed content), který popisuješ, se objevuje, když se snažíš načítat nezabezpečený HTTP obsah na stránce, která je sama zabezpečená HTTPS. Moderní prohlížeče to často blokují kvůli bezpečnosti.

Zde je několik možností, jak můžeš tento problém vyřešit:

  1. Přejít na HTTPS: Nejjednodušší a nejbezpečnější řešení je použít HTTPS i pro API, které běží na localhostu. To můžeš udělat tak, že si nastavíš SSL certifikát pro svůj lokální server. Pro vývojové účely můžeš použít nástroje jako Let's Encrypt pro skutečný certifikát, nebo mkcert pro vytvoření důvěryhodného certifikátu pro lokální vývoj.
  2. Reverse Proxy: Pokud nemůžeš měnit konfiguraci API serveru k používání HTTPS, můžeš použít reverse proxy server, který bude přijímat HTTPS spojení a přesměrovávat je na tvůj HTTP server. Nginx je oblíbená volba pro tento účel. Reverse proxy by přijímal HTTPS požadavky a přesměrovával je na tvůj lokální HTTP server.
  3. Výjimky v prohlížeči: Méně bezpečnou, ale někdy praktickou možností je přidání výjimky v prohlížeči pro konkrétní stránky, aby povolily nezabezpečený obsah. Toto by však mělo být používáno pouze jako dočasné řešení, protože snižuje celkovou bezpečnost komunikace.
  4. Lokální vývojové nástroje: Pokud pracuješ pouze v lokálním vývojovém prostředí, můžeš použít nástroje jako ngrok, které ti umožní zveřejnit tvé lokální servery na internetu s HTTPS.
  5. Content Security Policy (CSP): Toto je zabezpečení, které ti umožňuje definovat, jaký obsah může být načítán na tvé stránce. CSP může být užitečné pro kontrolu různých aspektů bezpečnosti, ale v tvém případě to nevyřeší problém smíšeného obsahu přímo. CSP spíše zabraňuje rizikům spojeným s některými typy útoků, jako je cross-site scripting.

Doporučuji začít s implementací HTTPS pro tvé API. To nejenže vyřeší problém smíšeného obsahu, ale také zvýší celkovou bezpečnost tvého systému.

Děkuji moc za odpověď a vysvětlení. HTTPS na API bohužel nedám, protože se jedná o platební terminál, který funguje pouze na http localhostu – potvrzeno od banky. Výjimky v prohlížeči jsem si pro debug nastavil, ale u klienta to dělat nechci. :) CSP chápu. Postavil jsem si nakonec proxynu na nodejs. Takže klientům budou muset na terminálu běžet nodejs, aby mohli e-shop/web/pokladnu propojit s terminálem. Je to otrava, ale asi lepší možnosti nejsou.

Původně jsem čekal, že půjde něco nastavit přímo v nette, protože jsem ohledně toho dohledal pár vláken, ale nic, co by právě pomohlo.

Šaman
Člen | 2655
+
+3
-

Rndoom04 napsal(a):

HTTPS na API bohužel nedám, protože se jedná o platební terminál, který funguje pouze na http localhostu – potvrzeno od banky.

Je to trochu offtopic, ale WTF? Nezabezpečený platební terminál? Zrovna u banky bych čekal, že bez certifikátu komunikovat vůbec nebude.