xmlhttprequest cu readyState=4 0 si status=0

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

Misulache12
PHPRomania Supporter
Mesaje: 27
Membru din: Vin Aug 22, 2014 10:33 am

xmlhttprequest cu readyState=4 0 si status=0

Mesajde Misulache12 » Joi Apr 16, 2015 2:58 pm

Am dezvoltat o pagina HTML, paginamea.html, pe propriul calculator in folderul local al IIS sub windows7. Pagina apeleaza un script php, folosind xmlhttprequest, de pe site-ul institutiei mele http://www.institutie.ro pentru a accesa o baza de date MySQL. Se pot distinge doua situatii:
1. Lansez in executie paginamea.html cu dubluclick din windows explorer. In bara de adrese a IE apare adresa c:\inetpub\wwwroot\etc\paginamea.html si scriptul php aflat la distanta este apelat fara probleme.
2. Lansez in executie paginamea.html scriind in bara de adrese a browserului http://localhost/etc/paginamea.html. Toate merg perfect mai putin lansarea in executie a scriptului php la distanta.
Sondand mai adanc am constatat ca in cazul 2: xhr.status=0 desi xhr.readyState=4. Daca deschid debugerul acesta ma avertizeaza ca am o eroare de Cross-Site-Scripting din cauza ca nu primeste headerul Access-Control-Alow-Origin. Am cerut prin program afisarea turor headerelor cu instructiunea js: alert(xhr.getAllResponseHeaders()). In cazul 1, desi merge corect si xhr ajunge in readyState=2, sunt afisate toate headerele dar ciudat headerul Access-Control-Alow-Origin nu apare. In cazul 2, in care oricum nu merge corect, xhr nici macar nu ajunge in readyState=2, trece direct in readyState=4 si nu apare nici un header de raspuns.
Sa inteleg de aici ca in cazul 1 programul browser nu isi mai pune problema de Cross-Site-Scripting. E un avantaj dar oare ce dezavantaje pot decurge de aici si de ce nu primesc nici un header de raspuns in cazul 2?



Avatar utilizator
mihaitha
Senior Member
Mesaje: 2383
Membru din: Vin Mai 04, 2007 12:40 pm
Localitate: Sibiu
Contact:

Re: xmlhttprequest cu readyState=4 0 si status=0

Mesajde mihaitha » Sâm Mai 23, 2015 11:56 am

Eroarea de Cross-Site-Scripting este pentru ca, in mod normal, nu poti apela prin AJAX pagini de pe un alt domeniu decat cel de pe care lansezi request-ul. E o masura de securitate, pentru ca AJAX este client-side si de aceea poate fi manipulat pentru a rula cod malitios. Header-ul Access-Control-Allow-Origin nu functioneaza cum crezi tu, nu se foloseste pentru a spune site-ului sursa (localhost-ul tau in cazul asta) in ce directie poate trimite request-uri AJAX, ci trebuie trimis de site-ul in care faci request (institutie.ro in acest caz), si practic spune scripturilor care il apeleaza daca request-ul e valid.

Iti recomand sa iei rezultatul respectivului script printr-un wrapper cURL, pentru a evita restrictiile standardului AJAX.


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 15 vizitatori