Content-Security-Policy használata
Hali!
Van egy oldal ami https-en fut, és van egy másik, ami http-n. A https-es oldalon akarok meghívni egy php-t a http-sről.
A CSP nem engedi vegyes aktív használatát.
Mindkét oldalt én kezelem, ellenben nem tudok a másodikra https-t tenni, az elsőn pedig nem tudom azt futtatni amit a másodikon.
Próbáltam már a https-es alatt php-n beállítani hogy bármilyen CSP működjön.
PHP kód:
header("Content-Security-Policy: default-src * 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; frame-src *; style-src * 'unsafe-inline';");
Próbáltam ugyanezt htaccess-sel is.
nem működik így sem.
Hogyan tudom megoldani, hogy képes legyen a böngsző lekérni valamit http alól?
Norbi
re: Content-Security-Policy használata
A CSP az XSS ellen véd. Vagyis injektált Javascript ellen. A JavaScript frontend. Arról beszélünk, hogy hogyan tudsz JS-sel betölteni egy remote PHP-t? És azt eval-lal kiértékelni? Sehogy.
De a remote PHP fájl által renderelt oldalt be tudod tölteni. De nem így. Egyszerűen csinálj egy php fájlt, ami meghívja és lekéri az adott http-s URL-ed tartalmát. (Nyilván ha nincs még neki publikus végpont, akkor megcsinálod a routingot előtte).
Aztán most hogy megvan az http-s címen elérhető tartalom, már használhatsz egyszerű ajaxot hogy behúzd frontenden. Immáron a saját szerveredről, ami nem sért semmilyen CSP-t a világon.
Azért van az inline előtt unsafe hogy ne használd! És azért van az eval előtt unsafe hogy ne használd!
Nem tudom, van-e más célja ennek a hosszú CSP-nek, de ez többet árt mint véd, úgyhogy egyszerűsítsd le
PHP kód:
header("Content-Security-Policy: default-src 'self' *.a_megbízható_http-s_oldalad_címe.hu"); // ha valaha akarsz js-t is futtatni a másik oldalról, ha nem, akkor elég a self
(Az SSL/TLS az oldalad látogatója és az oldalad szervere közötti asszimetrikus kulcsú titkosítás. Az oldalad ugyanúgy küldhet lekéréseket SSL/TLS nélküli címekre, attól nem fog neked eltűnni a lakat, de CSAK BACKENDEN, vagyis php-ból. Akkor vált sárgára a lakat, ha külső resourceokat (javascripteket, css-t, fontokat, stb.) használsz http-s címekről https helyett. Ha egy másik oldal nem biztosít lehetőséget a titkosított csatornára, és a resource statikus, akkor fontold meg hogy letöltöd lokálba, és onnan szolgálod ki. Ha dinamikus, akkor egyszerűen dobod a szolgáltatást mert ahol ennyit nem tudtak megcsinálni, az szar is.)
Ennyi. Nem kell túlbonyolítani.
re: Content-Security-Policy használata
Igazából annyi az egész, hogy van a example.com/example.php mondjuk, és azon van egy JS ami lekéri majd kiírja a other.com/other.php tartalmát. Az other lassan tölt be, mivel parancssort futtat, és arra vár. (szükségem is van rá hogy várjon) Ez XMLHTTP kérés lenne.
Ha az example.php-ba beleírom, hogy
PHP kód:
header("Content-Security-Policy: default-src 'self' *.other.com");
akkor engedni fogja, hogy betöltődjön?
Vagy csináljak egy php-t az example.com-n ami lekéri az other.com/other.php tartalmát?
Azt a hosszú CSP-t nem is igazán akartam használni, az gyakorlatilag a védelem nullázása. De azzal sem működött.
re: Content-Security-Policy használata
Azért nem működött, mert az eval ebben a kontextusban javascript kiértékelését jelenti, nem php-t. Plusz a modern böngészők nem véletlenül nem támogatják ezeket hogy 'unsafe-eval'. Az XmlHttp az ajax.
Csináld úgy, ahogy leírtam!
example.com/getRemoteWhatever.php -ben curl-lel leszeded az other.php tartalmát és echo-zod.
example.com/example.php-ben $.get("/getRemoteWhatever.php"); (jquery-vel), ez az egész js-ed.
a header-t vszleg meg se kell változtatnod, kiszedheted az egészet, mert a default működni fog.
Ha túl lassan tölt be, akkor php.ini execution time beállítással ki tudod tolni a betöltés idejét. (ha nincs hozzáférésed a szerverhez, akkor ini_set("max_execution_time", "időlimit egész számként másodpercekben");
re: Content-Security-Policy használata
Rendben, csupán azt reméltem megoldható közvetlenül is, hiszen a http-s képek, zenék, stb betöltenek https alatt is, csak a lakatnál egy felkiáltójel van. "A weboldal egyes részei nem biztonságosak (például a képek)."
Akkor megcsinálom úgy, ahogy írtad.
Köszi
re: Content-Security-Policy használata
Nincs mit, de ha csak ennyi a probléma, akár át is másolhatod azokat a fájlokat az új oldalra.