Breșele de securitate costă întreprinderile în medie patru milioane de dolari per incident, iar aplicațiile web rămân cel mai comun vector de atac. Totuși, multe echipe de dezvoltare tratează în continuare securitatea ca o listă de verificare pre-lansare în loc de o practică continuă integrată în fiecare etapă a ciclului de dezvoltare. Practicile prezentate aici reprezintă minimul pe care fiecare aplicație web de producție ar trebui să-l implementeze, nu obiective aspiraționale.
Autentificarea și gestionarea sesiunilor formează prima linie de apărare. Implementăm autentificarea folosind biblioteci testate în bătălii în loc de implementări personalizate, deoarece criptografia și gestionarea sesiunilor sunt domenii în care erori subtile creează vulnerabilități catastrofale. Sesiunile folosesc cookie-uri secure, HttpOnly, SameSite cu ferestre scurte de expirare și rotație automată. Autentificarea multi-factor este obligatorie pentru acces administrativ și disponibilă pentru toți utilizatorii. Politicile de parole impun entropie minimă în loc de reguli arbitrare de complexitate, iar noi integrăm verificarea bazelor de date de breșe pentru a respinge parolele cunoscute ca compromise la momentul înregistrării.
Validarea intrărilor și codificarea ieșirilor previn cele mai comune clase de vulnerabilitate. Fiecare bucată de intrare a utilizatorului este validată conform unei scheme stricte pe partea de server, indiferent de orice validare pe partea de client. Folosim exclusiv interogări parametrizate pentru a preveni injecția SQL și codificare a ieșirilor conștientă de context pentru a preveni cross-site scripting. Headerele Content Security Policy restricționează execuția scripturilor la surse de încredere. Limitarea ratei pe endpoint-urile de autentificare, rutele API și trimiterile de formulare previne atacurile brute force și abuzul.
Securitatea lanțului de aprovizionare a devenit la fel de critică. Fiecare dependență este o suprafață potențială de atac. Fixăm versiunile exacte ale dependențelor, audităm arborele de dependențe pentru vulnerabilități cunoscute la fiecare build și folosim fișiere lock pentru a preveni injecția în lanțul de aprovizionare. Imaginile de container sunt construite din imagini de bază minimale și scanate pentru vulnerabilități înainte de implementare. Infrastructura este definită ca și cod și implementată prin pipeline-uri auditate cu porți obligatorii de revizuire. Secretele sunt stocate în servicii dedicate de gestionare a secretelor, niciodată în repositorii de cod sau fișiere de mediu comise în controlul versiunilor.