Home » Articole » Știri » Cross-origin resource sharing

Cross-origin resource sharing

postat în: Știri 0

ajax-programming-logoCross-origin resource sharing (CORS) este un mecanism care permite multe resurse (de exemplu, fonturi, JavaScript, etc.) pe o pagina web să fie solicitate de pe un alt domeniu în afara domeniului de unde provine resursa. În particular, apelurile AJAX JavaScript pot utiliza mecanismul XMLHttpRequest. Astfel de cereri „inter-domenii” ar putea fi altfel interzis de către browsere web, prin politica de securitate a aceleiași origine. CORS definește un mod în care browser-ul și serverul pot interacționa pentru a stabili dacă este sau cazul să permită cererea de cross-origine. Este mai util decât decât permisiunea cererilor de aceiași origine, și este mai sigură decât pur și simplu să permită tuturor cererilor cross-origine.

Cum lucrează CORS

Standardul CORS funcționează prin adăugarea de noi antete HTTP care oferă instrucțiuni pentru client. Browserele sprijină aceste antete și respectă restricțiile care le stabilesc. În plus, pentru metodele de cerere HTTP care pot cauza efecte secundare asupra datelor de utilizator (în special, pentru metodele de HTTP altele decât GET, sau pentru utilizarea POST cu anumite tipuri MIME), specificaţia permite ca browserele „să verifice” cererea, solicitând metode acceptate de la server cu o solicitare de antet  HTTP OPTIONS, iar apoi, pe baza „aprobării” de la server, trimite cererea actuală cu metoda actuală de cerere HTTP. Serverele pot notifica de asemenea clienților dacă „prerogativele” (inclusiv cookies și datele de autentificare HTTP) trebuie trimise cu cereri.

Exemplu simplificat

Pentru a iniția o cerere de cross-origine, un browser trimite cererea cu un antet HTTP Origin. Valoarea acestui antet este domeniul care a servit pagina. De exemplu, să presupunem că o pagină de la https://www.telework.ro încearcă să acceseze datele unui utilizator în sfetcu.com. Dacă browser-ul utilizatorului implementează CORS, următorul antet cerere va fi trimis la sfetcu.com:

Origin: https://www.telework.ro

Dacă sfetcu.com permite cererea, acesta trimite un antet Access-Control-Allow-Origin (ACAO) în răspunsul său. Valoarea antetului indică ce site-uri de origine sunt permise. De exemplu, un răspuns la solicitarea precedentă ar putea să conțină următoarele:

Access-Control-Allow-Origin: https://www.telework.ro

Dacă serverul nu permite solicitarea cross-origine, browser-ul va livra o eroare la pagina sitwer.ro loc de răspunsul sfetcu.com.

Pentru a permite accesul la toate domeniile, un server poate trimite următorul antet de răspuns:

Access-Control-Allow-Origin: *

Acest lucru nu este, în general, adecvat atunci când se utilizează politica de securitate pentru aceiași origine. Singurul caz în care acest lucru este necesar când se utilizează politica pentru acelaiși origine este atunci când o pagină sau un răspuns API este considerat cu conținut complet public și se intenționează să fie accesibil tuturor, inclusiv oricărui cod de pe orice site. De exemplu, această politică este adecvat pentru fonturi web grtuite disponibile pe serviciile publice de hosting, cum ar fi Google Fonts.

Pe de altă parte, acest model este utilizat pe scară largă și în mod corespunzător în modelul apabilitate-obiect, unde paginile au URL-uri imposibil de detectat și sunt menite să fie accesibile pentru oricine care cunoaște secretul.

Valoarea lui „*” este specială prin faptul că nu permite cereri de furnizare de acreditări, adică autentificare HTTP, certificate SSL pe partea de client, şi nici nu permite transmiterea de cookie-uri.

Rețineți că în arhitectura CORS, antetul Acao este stabilită de serviciul web extern (sfetcu.com), nu serverul de aplicații web original (sitweb.ro). CORS permite serviciului web extern să autorizeze aplicaţia web să utilizeze serviciile sale și nu supune controlului serviciile externe accesate de către aplicația web. Pentru aceasta din urmă, ar trebui să fie utilizată politica de securitate a conţinutului (directiva connect-src).

Suport browser

CORS este suportat de toate browserele bazate pe următoarele motoare de layout:

  • Gecko 1.9.1 (Firefox 3.5, SeaMonkey 2.0, Camino 2.1) și mai nou.
  • WebKit (revizuire inițială incertă, Safari 4 și mai nou, Google Chrome 3 și mai nou, eventual mai vechi)
  • MSHTML/Trident 6.0 (Internet Explorer 10) au suport nativ. MSHTML/Trident 4,0 şi 5,0 (Internet Explorer 8 și 9) oferă suport parțial prin obiect XDomainRequest.
  • Browsere bazate pe Presto (Opera) implementează CORS începând cu Opera 12.00 și Opera Mobile 12, dar nu Opera Mini.

Următoarele browsere sunt, de asemenea, demne de remarcat pentru lipsa lor de suport CORS:

  • Camino nu pune în aplicare CORS, în versiunile 2.0.x, deoarece aceste versiuni sunt bazate pe Gecko 1.9.0.
  • Începând cu versiunea 0.10.2, Arora expune API-uri CORS de la WebKit, dar a încercările de cereri cross-origine au eșuat.

Istorie

Suportul cross-origine a fost propus inițial de Matt Oshry, Brad Porter, şi Michael Bodell de la Tellme Networks în martie 2004, pentru a fi incluse în VoiceXML 2.1 pentru a permite solicitările de date în condiții de siguranță cross-origine de către browsere VoiceXML. Mecanismul a fost considerat de natură generală și independent de VoiceXML și, ulterior, a fost separat într-o Notă. punere în aplicare. WebApps Working Group de la W3C cu participarea principalilor vânzători de browsere a început să oficializeze Nota într-un proiect al W3C în lucru pentru statutul oficial de Recomandare W3C.

Relația CORS cu JSONP

CORS poate fi folosit ca o alternativă modernă la modelul JSONP. În timp ce JSONP acceptă numai metoda de cerere GET, CORS suportă, de asemenea, şi alte tipuri de cereri HTTP. Folosirea CORS permite unui programator web să utilizeze XMLHttpRequest regulat, care suportă mai bine manipularea erorilor decât JSONP. Pe de altă parte, JSONP funcționează pe browserele vechi care preced suportul CORS. CORS este suportat de majoritatea browserelor web moderne. De asemenea, în timp ce JSONP poate provoca probleme de cross-site scripting (XSS) în cazul în care site-ul extern este compromis, CORS permite site-urilot web să analizeze manual răspunsurile pentru a asigura securitatea.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *