SOP és AJAX 2018. november 27., kedd - 10:02


Sokat SOPtam már a Same-origin policy miatt.

Röviden ez egy olyan biztonsági eljárás a böngészőkben, alapértelmezetten, logikus módon bekapcsolva, hogy ha valami komolyabb dolog történik egy másik host közbenjárásával, akkor azt megtiltja a böngésző - így elkerülve azt, hogy pl. egy weblapon lévő képet átemeljünk a canvasunkra, mert hátha az nem is kép, hanem vírus. Vagy mai esetemben, hogy jquery ajax-szal POST kérést küldjek egy PHP-nak, ami másik webcímen van.

Ugyanis olyan helyzet adódott, hogy kéne egy rendszert írnom, ami automatizálja (egy kattintásra rövidít) egy megszokott adatmentési folyamatot, amiben szerepel két kép elmentése, egy email elmentése, és pár fájl/mappa létrehozása/átnevezése. Ehhez egy weblap adatbázisára van szükség, és sajnos nem igazán tudtam hozzáférni. Szóval a terv az volt, hogy egy kattintásra megnyílik az adatbázis adott sorának típusával GET-ben egy oldal, ami feldolgozza az összes adatot a sorból, és megfelelő formátumban. És a célom az volt, hogy ezeket az adatokat, többek közt a két kép URL-jét is GET formába szerializálva a linkbe építem, ami egy localhostos oldalra irányít át. Majd a localhoston lévő kis PHP progi a többit elintézi, hisz az már a saját gépen tud mappákat nyitogatni, létrehozni, átnevezni fájlokat, meg a képeket letölteni, pl. cURL hívással.

Persze a cURL-lal is szívtam, mire sikerült megkerülnöm az SSL-t..

$ch = curl_init('https://weboldal.hu/image.jpg'); $fp = fopen('localhostom/letoltottkep.jpg', 'wb'); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp);
De ugye a GET hátránya, hogy nem nagyon lehet végtelen hosszúságú stringet továbbítani, ezért POST-tal kellett volna megoldani, viszont nem voltam biztos benne, hogy lehetséges, hogy egy random URL-ről JS-ből küldve POST kérés lefusson pl. a localhoston. Jól működött a dolog, a teszt alatt kiderült, hogy megfelelő engedélyekkel még fordítva is megy. Localhost POST AJAX megkapta az eredményt a webre feltöltött PHP-tól. Csak a headerrel keleltt kicsit bénázni. Örülök. :D

header("Access-Control-Allow-Origin: *"); header('Access-Control-Allow-Credentials: false'); header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); header('Content-Type: text/html; charset=utf-8');
Gondoltam leírom, hátha más is szenved, vagy csak nem volt ilyesmiben biztos /mint én is/, de érdekelné.

Nincsenek megjegyzések: