[[oktatas:web|< Web]] ====== Cross-Origin ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2021 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Cross-Origin kérések ===== A böngészők biztonsági okokból nem engedik meg más forrásból származó HTTP kéréseket. Ez megkötés megköveteli, hogy a azonos tartományba helyezzük a webhelyünk részeit. Példa a blokkolásra: Access to fetch at 'http://localhost:8000/list.php' from origin 'http://localhost:3000' has been blocked by CORS policy A böngészők akkor állítanak be CORS irányelv blokkolást, ha például egy API tartományneve (domain, gépnév cím) nem egyezik meg a lekérő nevével. Ez a viselkedés biztonsági okokból elvárható. Szerveroldalon engedélyezhető a hozzáférés CORS irányelvek beállításával. Nyilvánossá is tehetjük az API-t, de megadhatjuk, hogy csak egy tartománynévre működjön. ===== Hozzáférés vezérlés ===== A következő szabályokat szokás beállítani: Access-Control-Allow-Origin: http://engedett.domain.lan Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: Content-Type * Access-Control-Allow-Origin * null vagy *, ami az összes forrást jelenti * Access-Control-Allow-Methods * HTTP metódusok. * Access-Control-Allow-Headers * A kérelemben szereplő fejlécek listája. * Hitelesítést itt kell feltüntetni. ===== Beállítás .htaccess fájlban ===== Header Set Access-Control-Allow-Origin "https://kulso-eroforrascim" Ha csak egy (*) karakter állítunk be, a CORS le van tiltva, és mindenhonnan elérhető az erőforrás. Header Set Access-Control-Allow-Origin "*" ===== Beállítás PHP-ból ===== A következő példa egy nyilvános REST API számára lehetséges beállítás. Elég egyetlen sor: De minden mást is szabályozhatunk: A cors.php fájl egy require() függvénnyel beemelve, a szabályok érvénybe lépnek. ===== Proxy ===== Ha a célszerveren CORS blokkolás van, beállíthatunk egy proxyt is. Proxynak megfelel egy másik szerver (akár PHP szerver), amin mi vagyunk a rendszergazdák, vagy be engedélyezve van a Cross-Origin kérés. Ez azért lehetséges, mert a blokkolás a böngészőkben van beállítva. ===== Linkek ===== * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin (2021) * https://jeremyliberman.com/2019/02/11/fetch-has-been-blocked-by-cors-policy.html (2021) * https://portswigger.net/web-security/cors/access-control-allow-origin (2021)