Protejarea utilizatorilor împotriva atacurilor XSS DOM-Based

protejarea utilizatorilor împotriva atacurilor XSS DOM-Based

Cross-site scripting (XSS) este una dintre cele mai comune wayshackers ataca site-uri web. Vulnerabilitățile XSS permit unui utilizator rău intenționatexecutați bucăți arbitrare de JavaScript atunci când alți utilizatori vizitează site-ul dvs.

XSS este cea mai comună vulnerabilitate de securitate raportată public și face parte din setul de instrumente al fiecărui hacker.

riscuri

prevalență rară

exploatarea ușoară

impact dăunător

atacurile XSS bazate pe DOM au toate riscurile asociate cu celelalte tipuri de atacuri XSS, cu bonus adăugat că sunt imposibil de detectat din partea serverului.Orice pagină care utilizează fragmente URI este potențial expusă riscului atacurilor XSS.

protecție

protejarea împotriva atacurilor XSS bazate pe DOM este o chestiune de verificare a faptului că yourJavaScript nu interpretează fragmentele URI într-un mod nesigur. Există o serie de modalități de a asigura acest lucru.

utilizați un cadru JavaScript

cadre precum AngularJS și React utilizați șabloane care fac din construcția HTML ad-hoc o acțiune explicită (și rară). Acest lucru vă va împinge echipa de dezvoltare către cele mai bune practici și va facilita detectarea operațiunilor nesigure.

AngularJS

în unghiular orice conținut dinamic scris în paranteze cret va fi scăpat automat, astfel încât următoarele este sigur:

 <div>{{dynamicContent}}</div>

aveți grijă la orice cod care leagă conținutul dinamic de atributul innerHTML, deoarece acesta nu va fi scăpat automat:

 <div ="dynamicContent"></div> <div innerHTML="{{dynamicContent}}"></div>
React

în React orice conținut dinamic scris în paranteze cret va fi scăpat automat, astfel încât următoarele sunt sigure:

render() { return <div>{dynamicContent}</div>}

React vă permite să scrieți HTML brut prin legarea conținutului la proprietatea dangerouslySetInnerHTML, care este numită pentru a vă reaminti riscul de securitate! Ferește-te de orice cod care arata ca următoarele:

render() { return <div dangerouslySetInnerHTML={ __html: dynamicContent } />}
Audit Codul cu atenție

uneori, un cadru JavaScript complet este prea grea pentru dvs site.In în acest caz, va trebui să efectuați în mod regulat revizuiri de cod pentru a identifica locațiileaceastă referință window.location.hash. Luați în considerare elaborarea unor standarde de codificare convenite cu privire la modul în care fragmentele URI trebuie scrise și interpretate și centralizați această logică într-o bibliotecă de bază.

dacă utilizați JQuery, verificați cu atenție orice cod care utilizează funcțiahtml(...). Dacă construiți HTML brut pe partea de client pe partea din spate a intrărilor de încredere, este posibil să aveți o problemă, dacă intrarea provine dintr-un fragment URI sau nu. Utilizați funcția text(...) ori de câte ori este posibil.

dacă utilizați direct API-urile Dom native, evitați utilizarea următoarelor proprietăți și funcții:

  • innerHTML
  • outerHTML
  • document.write

în schimb, setați conținutul textului în etichete ori de câte ori este posibil:

  • textContent
analizați cu atenție JSON

Nu Evaluați JSON pentru a – l converti în obiecte JavaScript native-de exemplu, utilizând funcția eval(...). În schimb, utilizați JSON.parse(...).

detectați Codul nesigur folosind instrumente de dezvoltare

suita Burp, produsă de firma de securitate PortSwigger,poate fi utilizată pentru a detecta vulnerabilitățile bazate pe DOM.

nu folosiți fragmente URI deloc!

cel mai sigur cod este codul care nu există. Dacă nu trebuie să utilizați fragmente URI, atunci nu! Scrieți un test de unitate pentru a scana JavaScript pentru mențiuni de window.location.hash și faceți-l să eșueze dacă modelul este găsit. Când este nevoie să utilizați fragmente URI, atunci puteți discuta cum să vă asigurați utilizarea în siguranță.

implementați o politică de securitate a conținutului

browserele moderne acceptă Politici de securitate a Conținutuluicare permit autorului unei pagini web să controleze de unde JavaScript (și alte resurse)pot fi încărcate și executate. Atacurile XSS se bazează pe faptul că atacatorul poate rula scripturi rău intenționate pe pagina web a unui utilizator – fie prin conectarea etichetelor inline <script> undeva în eticheta <html> a unei pagini, fie prin păcălirea browserului să încarce JavaScript dintr-un domeniu terț rău intenționat.

prin setarea unei politici de securitate a conținutului în antetul de răspuns, puteți spune browserului să nu execute JavaScript în linie și să blocheze domeniile care pot găzdui JavaScript pentru o pagină:

conținut-securitate-politică: script-src ‘self’ https://apis.google.com

prin listarea albă A uri-urilor din care pot fi încărcate scripturile, declarați implicit că JavaScript inline nu este permis.

Politica de securitate a conținutului poate fi setată și într-o etichetă <meta> din elementul <head>al paginii:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com">

această abordare vă va proteja utilizatorii foarte eficient! Cu toate acestea, poate durao cantitate considerabilă de disciplină pentru a vă pregăti site-ul pentru un astfel de antet.Tag-uri script-uri Inline sunt considerate practici proaste în moderne de web-dezvoltare – amestecarea conținutului și Codul face web-aplicații dificil de întreținut-dar sunt comune în mai vechi, site-uri vechi.

pentru a migra de la script-uri inline incremental, ia în considerare makings utilizare ofCSP încălcare Reports.By adăugând o directivă report-uri în antetul politicii dvs., browserul vă va notifica despre orice încălcare a politicii, în loc să împiedice executarea JavaScriptfrom în linie:

conținut-securitate-politică-raport-numai: script-src ‘self’; raport-uri http://example.com/csr-reports

acest lucru vă va oferi asigurări că nu există scripturi inline persistente,înainte de a le interzice direct.

lecturi suplimentare

  • cum funcționează Cross-site Scripting
  • o introducere în Politica de securitate a conținutului
  • CSP (Politica de securitate a conținutului) în rețeaua de dezvoltatori Mozilla
  • Dom bazat Cross-site Scripting vulnerabilitate
  • Politica de securitate a conținutului explicat
Cross-site Scripting

XSS reflectat

Lasă un răspuns

Adresa ta de email nu va fi publicată.