Xmlhttprequest cereri de domeniu încrucișat

De obicei, o solicitare XMLHttpRequest poate face o cerere numai în cadrul site-ului curent. Când încercați să utilizați un alt domeniu / port / protocol - browserul oferă o eroare.







Există un standard XMLHTttpRequest standard. el este încă într-un proiect, dar oferă cereri de domenii intermediare și multe altele.

Cele mai multe dintre caracteristicile acestui standard sunt deja acceptate de toate browserele, dar, din păcate, nu în IE9-.

Cu toate acestea, sunt acceptate interogări parțiale pe mai multe domenii, începând cu IE8, numai în loc de XMLHttpRequest trebuie să utilizați obiectul XDomainRequest.

Să analizăm interogările între domenii folosind exemplul de cod:

  1. Creăm XMLHttpRequest și verificăm dacă acceptă evenimentul onload. Dacă nu, atunci acesta este vechiul XMLHttpRequest. aceasta înseamnă IE8.9 și folosim XDomainRequest.
  2. O solicitare pentru un alt domeniu este trimisă pur și simplu prin specificarea adresei URL corespunzătoare deschise. Trebuie să fie asincronă, în rest - fără caracteristici speciale.

Solicitările de tip cross-domain fac obiectul unor controale speciale de securitate, al căror scop nu este de a lăsa hackerii răi să cucerească Internetul.

Serios. standarde dezvoltatorii ar trebui să ia în considerare toate barierele pentru „hacker“ ar putea să nu, profitând de noul standard, de a face ceva fundamental diferit de faptul că, și așa ar putea mai devreme și, astfel, „rupe“ orice server care rulează standardul vechi și nu se așteaptă nimic nou.

Să ne imaginăm, pentru un minut, că există un standard care oferă, fără limitare, capacitatea de a face ca orice pagină HTTP să solicite oriunde, orice.

Cum poate un hacker rău să exploateze acest lucru?

Specificația CORS impune restricții speciale asupra cererilor care sunt concepute pentru a preveni o astfel de apocalipsă.

Cererile din aceasta sunt împărțite în două tipuri.

Întrebările sunt considerate simple dacă satisfac următoarele două condiții:

  1. O metodă simplă. GET, POST sau HEAD
  2. Titluri simple - doar din listă:
  • accepta
  • Accept-Language
  • Content-Language
  • Content-Type cu valoare aplicație / x-www-form-urlencoded. multipart / formă-date sau text / simplu.

"Uneasy" este considerat a fi toate celelalte, de exemplu, o interogare cu metoda PUT sau cu antetul de autorizare nu se potrivește cu constrângerile de mai sus.

Principala diferență dintre acestea este că o interogare "simplă" poate fi generată și trimisă pe server fără XMLHttpRequest, de exemplu, utilizând un formular HTML.







Dar nu puteți crea interogări cu antete nestandard sau cu metoda DELETE. Prin urmare, vechiul server poate să nu fie gata pentru ei. Sau, de exemplu, el poate presupune că pagina web nu poate în principiu să trimită astfel de solicitări, așa că au provenit dintr-o cerere privilegiată și le-au dat prea multe drepturi.

Prin urmare, atunci când trimiteți cereri "neplăcute", trebuie să întrebați în mod special serverul dacă este de acord în principiu pentru astfel de solicitări de domenii intermediare sau nu? Și dacă serverul nu răspunde, că este de acord - înseamnă că nu.

În specificația CORS, după cum vom vedea mai târziu, există multe detalii, dar toate sunt unite printr-un singur principiu: noi caracteristici sunt disponibile doar cu consimțământul explicit al serverului (implicit - nu).

În interogarea inter-domeniu, browserul adaugă automat antetul Origine. care conține domeniul de la care sa făcut solicitarea.

Serverul trebuie să răspundă cu anteturi speciale, indiferent dacă permite o astfel de solicitare.

Xmlhttprequest cereri de domeniu încrucișat

Asta este, răspunsul serverului poate fi ceva de genul:

Dacă nu există accesul Control-Allow-Origine, browserul consideră că permisiunea nu este primită și completează cererea cu o eroare.

Ce poate face un hacker folosind astfel de solicitări?

Restricțiile descrise mai sus conduc la faptul că cererea este complet sigură.

Într-adevăr, o pagină rău poate genera orice solicitare GET / POST și o poate trimite, dar fără permisiunea serverului de răspuns nu va primi.

În IE9, se utilizează XDomainRequest. care este un XMLHttpRequest dezbinat.

Este supus următoarelor restricții:

Standardul XMLHttpRequest modern oferă un mijloc de depășire a acestor limitări, însă la momentul IE8 acestea nu au fost încă dezvoltate, deci nu au fost implementate. IE9 a stabilit câteva bug-uri, dar în general nu a adăugat nimic nou.

Prin urmare, pe site-urile care doresc să sprijine IE9 -, în practică interogările inter-domenii sunt rareori utilizate, preferând alte metode de comunicare între domenii. De exemplu, o etichetă SCRIPT generată dinamic sau un IFRAME auxiliar dintr-un alt domeniu. Vom discuta aceste abordări în capitolele ulterioare.

Cum să rezolvați solicitările de domeniu dintr-un site de încredere în IE9-?

Puteți activa interogările între domenii pentru site-urile "de încredere" din setările IE, în fila "Securitate", activând elementul "Accesul la sursele de date din afara domeniului".

Acest lucru se face, de obicei, pentru zona "Site-uri de încredere", după care este introdus un site de încredere. Acum se pot face cereri XMLHttpRequest în mai multe domenii.

Această metodă poate fi aplicată pe site-urile corporative, precum și în acele cazuri în care un vizitator are încredere în mod vădit, dar din anumite motive (computerul la locul de muncă, administratorul interzice plasarea unui alt browser?) Dorește să utilizeze IE. De exemplu, aceasta poate fi oferită ca o instrucțiune suplimentară "cum se face acest serviciu să lucreze în IE".

În IE este permis un alt port

Limitarea între domenii a IE nu include portul.

Acest lucru vă permite să rezolvați unele probleme asociate interacțiunii diferitelor servicii într-un singur site. Dar numai pentru IE.

Caracteristicile avansate descrise mai jos sunt acceptate de toate browserele moderne, cu excepția IE9-.







Articole similare

Trimiteți-le prietenilor: