Când vine vorba de securizarea site-ului dvs., totul este despre minimizarea suprafeței de atac și adăugarea mai multor straturi de securitate. Un strat puternic pe care îl puteți (și ar trebui) să îl adăugați este anteturile de securitate HTTP adecvate . Când răspundeți la solicitări, serverul dvs. ar trebui să includă anteturi de securitate care ajută la oprirea activităților nedorite, cum ar fi atacurile XSS , MITM și click-jacking. Deși trimiterea anteturilor de securitate nu garantează o apărare de 100% împotriva tuturor acestor atacuri, ajută browserele moderne să mențină lucrurile în siguranță. Așadar, în acest tutorial, parcurgem șapte dintre cele mai importante și mai eficiente antete de securitate HTTP pentru a adăuga un strat puternic de securitate site-ului dvs. bazat pe Apache.
Notă: puteți verifica anteturile de securitate ale site-ului dvs. utilizând un instrument online gratuit, cum ar fi cel oferit de SecurityHeaders.com .
X-XSS-Protecție
Antetul X-XSS-Protectionde securitate activează filtrul XSS furnizat de browserele web moderne (IE8+, Chrome, Firefox, Safari și colab.). Iată configurația recomandată pentru acest antet:
1 2 3 4 | # X-XSS-Protection <IfModule mod_headers.c> Header set X-XSS-Protection "1; mode=block" </IfModule> |
Adăugat la fișierul site-ului .htaccesssau fișierul de configurare a serverului, acest cod indică browserelor compatibile să blocheze orice solicitări care conțin scripturi rău intenționate. Pentru mai multe opțiuni de configurare și informații suplimentare despre X-XSS-Protection, consultați aceste resurse:
X-Frame-Opțiuni
Antetul X-Frame-Optionsde securitate (XFO) ajută browserele web moderne să vă protejeze vizitatorii împotriva clicurilor și a altor amenințări. Iată configurația recomandată pentru acest antet:
1 2 3 4 | # X-Frame-Options <IfModule mod_headers.c> Header set X-Frame-Options "SAMEORIGIN" </IfModule> |
Adăugat la fișierul site-ului .htaccesssau fișierul de configurare a serverului, acest cod indică browserelor compatibile să blocheze orice cadre/conținut solicitat din locații externe. Deci, dacă propriul site include un iframe care încarcă resurse din același domeniu, conținutul se va încărca normal. Dar dacă este inclus orice iframe care încarcă resurse de pe orice alt domeniu, conținutul va fi blocat. Pentru mai multe opțiuni de configurare și informații suplimentare despre X-Frame-Options, consultați aceste resurse:
X-Opțiuni-Tip de conținut
Antetul X-Content-Type-Optionsde securitate permite browserelor compatibile să se protejeze împotriva exploatărilor de tip MIME. Face acest lucru dezactivând caracteristica de sniffing MIME a browserului și forțându-l să recunoască tipul MIME trimis de server. Acest antet este foarte flexibil și poate fi configurat extensiv, totuși cea mai comună implementare arată astfel:
1 2 3 4 | # X-Content-Type-Options <IfModule mod_headers.c> Header set X-Content-Type-Options "nosniff" </IfModule> |
Adăugat la fișierul site-ului dvs. .htaccesssau fișierul de configurare a serverului, acest cod indică browserelor compatibile să utilizeze tipul MIME declarat de serverul de origine. Există câteva măsuri de precauție de reținut. În primul rând, ca și în cazul oricărui antet de securitate, nu oprește 100% din toate atacurile sau amenințările; le oprește totuși pe unele dintre ele și, astfel, oferă un alt nivel de protecție pentru site-ul dvs. De asemenea, rețineți că acest antet este acceptat în prezent numai în Chrome și în versiunile ulterioare ale Internet Explorer. Sperăm că alte browsere vor adăuga suport în viitor. Pentru mai multe opțiuni de configurare și informații suplimentare despre X-Content-Type-Options, consultați aceste resurse:
trict-Transport-Securitate
Antetul Strict-Transport-Security( HSTS ) indică browserelor moderne să se conecteze întotdeauna prin HTTPS (conexiune securizată prin SSL / TLS ) și să nu se conecteze niciodată prin protocolul HTTP nesecurizat (non-SSL). Deși există variații la modul în care este configurat acest antet, cea mai comună implementare arată astfel:
1 2 3 4 | # Strict-Transport-Security <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains" </IfModule> |
Adăugat la fișierul site-ului .htaccesssau fișierul de configurare a serverului, acest cod indică browserelor compatibile să folosească întotdeauna HTTPS pentru conexiuni. Acest lucru ajută la oprirea atacurilor „man-in-the-middle” (MITM) și a altor atacuri care vizează conexiuni HTTP nesigure. Pentru mai multe opțiuni de configurare și informații suplimentare despre Strict-Transport-Security, consultați aceste resurse:
Referitor-Politica
Antetul Referrer-Policyde securitate instruiește browserele moderne cum să gestioneze sau să excludă Refererantetul (da, antetul este scris incorect, lipsește un „r”). Pentru cei care nu sunt familiarizați, Refererantetul conține informații despre de unde provine o solicitare. Deci, de exemplu, dacă sunteți la example.comși faceți clic pe un link de acolo către domain.tld, Refererantetul va specifica example.comca adresă URL „de referință” .
Având în vedere acest lucru, Referrer-Policyvă permite să controlați dacă antetul este sau nu Refererinclus în cerere. Iată un exemplu care arată cum să adăugați Referrer-Policyantetul prin Apache:
1 2 3 4 | # Referrer-Policy <IfModule mod_headers.c> Header set Referrer-Policy "same-origin" </IfModule> |
Adăugat la fișierul site-ului dvs. .htaccesssau fișierul de configurare a serverului, acest cod indică browserelor compatibile să seteze numai antetul de referință pentru cererea de la domeniul curent ( same-origin). Rețineți că acest antet este mai puțin despre securitate și mai mult despre controlul informațiilor de referință, așa cum este cerut de diverse reguli și reglementări (de exemplu, GDPR). Pentru mai multe opțiuni de configurare și informații suplimentare despre Referrer-Policy, consultați aceste resurse:
Caracteristică-Politică
Actualizare! Antetul „Feature-Policy” este redenumit „Permissions Policy”. Consultați următoarele articole pentru mai multe informații: La revedere Politica de funcții, Politica de permisiuni și Salut Politica de funcționalități și Politica de permisiuni .
Antetul Feature-Policyle spune browserelor moderne care funcții sunt permise. De exemplu, dacă doriți să vă asigurați că sunt permise numai funcțiile de geolocalizare și vibrație, puteți configura Feature-Policyantetul în consecință. De asemenea, vă permite să controlați originea pentru fiecare caracteristică specificată. Iată un exemplu care arată cum să adăugați un Feature-Policyantet prin Apache:
1 2 3 4 | # Feature-Policy <IfModule mod_headers.c> Header set Feature-Policy "geolocation 'self'; vibrate 'none'" </IfModule> |
Adăugat la fișierul site-ului dvs. .htaccesssau fișierul de configurare a serverului, acest cod indică browserelor compatibile să activeze numai funcțiile de localizare geografică și vibrație. Rețineți că acest antet este mai puțin despre securitate și mai mult despre asigurarea unei experiențe fluide pentru utilizatorii dvs. Pentru mai multe opțiuni de configurare și informații suplimentare despre Feature-Policy, consultați aceste resurse:
Conținut-Securitate-Politică
Antetul Content-Security-Policy(CSP) le spune browserelor moderne care resurse dinamice pot fi încărcate. Acest antet este util în special pentru a opri atacurile XSS și alte activități rău intenționate. Acest antet oferă opțiuni extinse de configurare, care vor trebui ajustate pentru a se potrivi cu resursele specifice cerute de site-ul dvs. În caz contrar, dacă configurația antetului nu corespunde cerințelor site-ului dvs., este posibil ca unele resurse să nu se încarce (sau să funcționeze) corect.
Din această cauză, nu există un exemplu cel mai frecvent la care să te uiți. Deci, în schimb, iată câteva exemple diferite, fiecare permițând diferite tipuri de resurse.
Exemplul 1
Primul exemplu, iată o directivă CSP care permite resurse de la un CDN și nu permite orice conținut încadrat sau pluginuri media. Acest exemplu este de pe pagina de documente Google de mai jos.
1 2 3 4 | # Content-Security-Policy - Example 1 <IfModule mod_headers.c> Header set Content-Security-Policy "default-src https://cdn.example.com; child-src 'none'; object-src 'none'" </IfModule> |
Exemplul 2
Al doilea exemplu, această directivă CSP activează resursele de script încărcate dintr-un subdomeniu jQuery și limitează foile de stil și imaginile la domeniul curent ( self). Acest exemplu este de pe pagina de documente Mozilla la care se face legătura mai jos.
1 2 3 4 | # Content-Security-Policy - Example 2 <IfModule mod_headers.c> Header set Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self' https://code.jquery.com; style-src 'self'" </IfModule> |
Exemplul 3
Și pentru un al treilea exemplu, iată directiva pe care o folosesc pe majoritatea site-urilor mele bazate pe WordPress. În mod logic, aceste site-uri tind să utilizeze aceleași tipuri de resurse, așa că pot păstra lucrurile simple și pot folosi următorul cod pe toate site-urile:
1 2 3 4 | # Content-Security-Policy - Example 3 <IfModule mod_headers.c> Header set Content-Security-Policy "default-src https:; font-src https: data:; img-src https: data:; script-src https:; style-src https:;" </IfModule> |
Pentru a vă face o idee mai bună despre ceea ce se întâmplă aici, să aplicăm un pic de formatare codului:
Header set Content-Security-Policy "
default-src https:;
font-src https: data:;
img-src https: data:;
script-src https:;
style-src https:;
"
Uitați-vă la asta pentru câteva momente și ar trebui să vă faceți ideea: antetul setează sursa (sursele) permise pentru fonturi, imagini, scripturi și stiluri. Pentru fiecare dintre acestea, este necesară o conexiune HTTPS securizată. Singura excepție este, de asemenea, permiterea data URI -urilor ca sursă pentru fonturi și imagini.
Deci, pentru oricare dintre aceste exemple, atunci când este adăugat la fișierul site-ului dvs. .htaccesssau fișierul de configurare a serverului, codul spune browserelor care acceptă resursele dinamice permise și/sau nu. Dar serios, dacă vă gândiți să adăugați Content-Security-Policyantetul puternic de securitate, luați câteva momente pentru a citi o parte din documentație:
- MDN Docs: Politica de securitate a conținutului
- MDN Docs: implementarea politicii de securitate a conținutului
- Google Docs: Politica de securitate a conținutului
- Referință privind politica de securitate a conținutului
De unde să obțineți ajutor cu CSP
Da, CSP poate fi confuz, dar nu există niciun motiv de disperare. Există numeroase instrumente online care facilitează înțelegerea modului de implementare a CSP, de exemplu, iată câteva site-uri de top:
O căutare rapidă pentru „test csp online” dă multe rezultate.
Și mai bine, acum au „generatoare CSP” care scriu literalmente codul pentru tine pe baza variabilelor de intrare. Iată două generatoare CSP cu aspect solid:
Există o mulțime de instrumente utile pentru a face CSP mai ușor. Doar introduceți informațiile și copiați/lipiți rezultatele. Dacă aveți îndoieli, utilizați mai multe instrumente și comparați rezultatele; codul ar trebui sa fie acelasi. Dacă nu, nu ezitați să contactați furnizorii de instrumente, care vor putea răspunde la orice întrebări etc.
De dragul copierii/lipirii ușoare, iată un fragment de cod care combină toate anteturile de securitate descrise mai sus.
Important: înainte de a adăuga acest cod pe site-ul dvs., asigurați-vă că citiți fiecare tehnică așa cum este explicat în secțiunile corespunzătoare de mai sus. Pot exista note și informații importante pe care trebuie să le înțelegeți cu privire la fiecare directivă în particular inclusă în acest fragment de cod.
1 2 3 4 5 6 7 8 9 10 | # Security Headers <IfModule mod_headers.c> Header set X-XSS-Protection "1; mode=block" Header set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options "nosniff" Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains" # Header set Content-Security-Policy ... Header set Referrer-Policy "same-origin" Header set Feature-Policy "geolocation 'self'; vibrate 'none'" </IfModule> |
Ca și în cazul fiecărei tehnici de mai sus, acest cod poate fi adăugat la site-ul dvs. prin .htaccess sau Apache config. Înțelegeți că această tehnică include configurații utilizate în mod obișnuit pentru fiecare dintre anteturile incluse. Puteți (și ar trebui) să parcurgeți fiecare dintre ele pentru a vă asigura că configurația corespunde cerințelor și obiectivelor site-ului dvs. De asemenea, nu uitați să testați temeinic înainte de a intra în direct.
Notă: Observați următorul rând din fragmentul de cod „Antete de securitate” de mai sus:
# Header set Content-Security-Policy ...
Semnul de diez sau eticheta hash sau orice vrei să-l numești înseamnă că linia este dezactivată și este ignorată de server. Aceasta înseamnă că Content-Security-Policydirectiva este „comentată” și, prin urmare, nu este activă în această tehnică. De ce? Deoarece, așa cum s-a explicat anterior, nu există un exemplu de CSP recomandat „unic pentru toate” care să funcționeze perfect pe toate site-urile web. În schimb, va trebui să înlocuiți linia comentată cu propriul antet CSP configurat corespunzător, așa cum s-a explicat mai sus.