Unul dintre aspectele cele mai interesante ale dezvoltării web moderne este potențialul care vine cu crearea de aplicații special pentru browserele web (sau pentru a rula "în nor").
Inițial, Java trebuia să fie soluția "scrie-o dată, alerga-oriunde", dar se pare că internetul a devenit un mediu perfect pentru asta. Cine ar fi crezut, bine?
Dar, împreună cu diversele browsere pe care le avem la dispoziție, tehnologiile pe care le putem folosi și, pur și simplu, curat lucrurile pe care le putem face, există încă o subbelică întunecată pentru dezvoltarea de aplicații web - scripting cross-site.
Și având în vedere că WordPress este o aplicație web pe care mulți dintre noi construiește pentru distracție, profit sau pentru a-și câștiga existența, este un subiect pe care nu ar trebui să-l evităm mai ales dacă vrem să avem cele mai robuste produse posibile.
În această serie de două părți, vom examina ceea ce scripturi între site-uri într-adevăr este, pericolele sale, modul în care aceasta afectează dezvoltarea WordPress, și apoi pașii practice pe care le putem lua pentru a testa temele și pluginurile noastre.
Cross-site-scripting-ul, de obicei abreviat ca XSS, este definit pe Wikipedia astfel:
XSS permite atacatorilor să injecteze scriptul client-parte în paginile Web vizualizate de alți utilizatori. O vulnerabilitate a scripting-ului de la un anumit site poate fi utilizată de atacatori pentru a ocoli controalele de acces, cum ar fi aceeași politică de origine.
Cred că această definiție funcționează bine dacă sunteți familiarizați cu vulnerabilitățile, aceeași politică de origine și ceea ce constituie exact o injecție a unui script pe partea clientului, dar pentru mulți acest lucru nu este suficient.
O vedere conceptuală asupra modului în care datele călătoresc de la client la server.Deci, haideți să aruncăm o privire la scripturile de la fața locului înainte să mergem mai departe.
Scripturile de pe partea clientului sunt practic orice cod care rulează pe partea client a unui site web sau a unei aplicații web. În mod cert, cele mai populare scripturi de pe partea clientului sunt funcțiile JavaScript. În schimb, PHP ar fi considerat un script de server.
Un alt mod de a privi la aceasta este: Scripturile de pe partea clientului sunt trimise de pe server la computerul vizitatorului atunci când se încarcă pagina web. Scriptul execută apoi. Uneori face ceva simplu ca animarea unui meniu.
Alteori, poate face ceva mai avansat, cum ar fi efectuarea unui apel asincron la server, recuperarea unor date bazate pe locația utilizatorilor și adaptarea informațiilor pe care le văd.
Deși acest lucru se poate datora utilizării informațiilor despre locație furnizate de browser, este în siguranță în timp ce browserul menține datele și informațiile sunt preluate pe baza informațiilor disponibile publicului.
Poate că un nume mai bun pentru "Script Injection" este "injectarea de coduri".
Aici, un atacator caută literalmente un tip de element de intrare pe site-ul dvs. - acesta ar putea fi un câmp de căutare, un câmp de contact, un câmp de nume sau orice alt tip de element care transmite datele unui server. Acest lucru se face în mod normal prin utilizarea unui script - uneori este un program malware JavaScript, dar atacatori poate sa să fie de succes în introducerea comenzilor PHP sau MySQL, de asemenea.
În cele din urmă, se numește injectare, deoarece dacă atacatorul are succes, atunci se injectează literalmente al lor cod în ta cerere.
Conceptul unei politici de același tip este simplu: este o politică pe care browserele o impun, care permite în general scripturilor de pe partea clientului - cum ar fi JavaScript - să facă cereri către alte pagini și scripturi de pe server pe același server (sau aceeași origine), dar nu și altor domenii sau site-uri.
De exemplu, puteți seta o funcție JavaScript pentru a efectua un apel de la tutsplus.com la wordpress.com, pentru a prelua date, apoi a le afișa pe tutsplus.com. Asta ar viola politica de același tip.
Acum, pentru a clarifica, acest lucru nu înseamnă să spui asta nu poti fi realizat. Prin combinația dintre funcțiile creării clientului și apelurile de la server, lucrurile poate sa să fie realizate, dar browserele fac tot ce pot pentru a împiedica script-urile de pe partea clientului să facă acest lucru.
În acest moment, implicațiile ar trebui să fie destul de clare. Vulnerabilitățile de script-uri încrucișate pot oferi vizitatorilor rău intenționați controlul asupra site-urilor și aplicațiilor noastre web în moduri pe care, în cele din urmă, nu le vom putea controla.
De exemplu, ele pot varia de la relativ mici, până la mult mai critice:
Toate acestea depind de ce caracteristici oferă site-ul și cât de sigur este site-ul în realitate.
Indiferent de situație, securitatea aplicațiilor web este ceva care este aici pentru a rămâne. Cred că toți ar trebui să ne specializăm în domeniile noastre și că specialiștii în securitate sunt oameni cu care ar trebui să ne consultăm înainte de a lansa o aplicație web care poate conține informații sensibile, dar asta nu înseamnă că nu ne putem familiariza cu câteva strategii de bază pentru testarea proprie.
Înainte de a ne uita efectiv la practicile implementării tehnicilor XSS-sigure în eforturile noastre de dezvoltare, este important să notăm de ce - ca dezvoltatori WordPress - ar trebui să ne pese chiar de asta.
Luați în considerare acest lucru: WordPress este o aplicație web fullstack. Se compune dintr-o bază de date, un strat de aplicație și un strat de prezentare, toate fiind extensibile de alți dezvoltatori.
WordPress StackAcest lucru înseamnă că WordPress în sine este supus la multe din aceleași amenințări de securitate ca orice altă aplicație web este, dar cei care construiesc pentru WordPress sunt, de asemenea,.
Chiar dacă WordPress era foarte rezistent la orice atacuri XSS, acest lucru nu înseamnă că instrumentele terță parte, cum ar fi pluginurile sau temele, obțin aceste beneficii automat.
La urma urmei, acestea sunt construite de dezvoltatori terți care nu pot urma cele mai bune practici atunci când scriu codul defensiv.
Toate funcțiile WordPress sunt deoparte și la nivelul cel mai de bază, dacă lucrarea dvs. acceptă în orice fel o intrare din partea utilizatorului, atunci puteți deschide ușa pentru un exploit XSS.
Aș merge chiar atât de departe încât să spun că dacă doriți să folosiți câteva dintre API-urile principale ale WordPress pentru a accepta datele de intrare și stocare, atunci nu sunteți complet siguri.
La urma urmei, WordPress ar putea avea exploatații care încă nu au fost descoperite.
Deci, aceasta ridică întrebarea: dacă ne pasă cu adevărat de munca pe care o facem și dorim să construim ceva semnificativ mai sigur, atunci există o serie de lucruri pe care le putem face.
În primul rând, trebuie să ne asigurăm că folosim funcțiile adecvate API pentru a manipula câmpurile de intrare, atributele, validarea și dezinfectarea. Unele dintre aceste funcții oferă funcții specifice pentru:
De fapt, articolul Codex oferă funcții detaliate privind:
Vă recomandăm foarte mult să citiți articolul în întregime.
În al doilea rând, putem rula tema sau plugin-ul nostru printr-o baterie de teste XSS care sunt folosite pentru a descoperi orice exploatări pe care nu le-am reușit să le prindem. Dar vom acoperi acest lucru în următorul articol.
Pentru a rezuma, scriptingul între site-uri se referă la abilitatea utilizatorilor rău-intenționați de a introduce propriul cod rău intenționat în site-ul nostru web, aplicație web, temă sau plugin în încercarea de a obține controlul asupra unui aspect - sau a tuturor aspectelor -.
Potențialul de exploatare variază de la aplicație la aplicație, dar având în vedere faptul că domeniul nostru de specialitate este cu WordPress, vom fi concentrându-ne pe strategiile de exploatare a probei muncii noastre în articolul următor.