.htaccess este fișierul cel mai neglijat de majoritatea creatorilor de conținut online din România. Este ușor să lași doar directivele WordPress în acest fișier atunci când ai un blog online, însă te poți expune foarte ușor atacurilor. Fișierul .htaccess poate conține anteturi de securitate care ajută la oprirea activităților de hacking nedorite, cum ar fi atacurile XSS , MITM și click-jacking. Nu ne referim doar la blog-uri, ci și la magazine online, site-uri de prezentare și așa mai departe. Nici măcar configurarea de bază nu este realizată. Headerele sau anteturile setate in fișierul .htaccess sunt cele care dictează reguli / directive de funcționare pentru folderul curent și toate subfolderele (dacă nu ați creat deja un fișier .htaccess în subfolder).
Codurile adăugate în fișierul site-ului .htaccesss au 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 am pregătit o listă de îmbunătățiri pe care o puteți evalua și adăuga în configurația fișierului .htacces al site-ului vostru:
- X-XSS-Protection
- X-Frame-Options
- X-Content-Type-Options
- HTTP Strict Transport Security (HSTS)
- Referrer-Policy
- Feature-Policy
- Content-Security-Policy
X-XSS-Protection
Antetul de securitate X-XSS-Protection activează filtrul XSS furnizat de browserele web moderne (IE8+, Chrome, Opera, Firefox, Safari etc). Iată configurația recomandată pentru acest antet:
# X-XSS-Protection
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
Adăugate la fișierul site-ului .htaccess sau în fișierul de configurare a serverului, acest cod indică browserelor compatibile să blocheze orice solicitări care conțin scripturi rău intenționate.
X-Frame-Options
Antetul X-Frame-Options de securitate (XFO) ajută browserele web moderne să vă protejeze vizitatorii împotriva clicurilor și a altor amenințări. Iată configurația recomandată pentru acest antet:
# X-Frame-Options
<IfModule mod_headers.c>
Header set X-Frame-Options "SAMEORIGIN"
</IfModule>
Adăugat la fișierul site-ului .htaccess sau în fișierul de configurare a serverului, acest cod indică browserelor compatibile să blocheze orice cadre/conținut solicitat din locații externe.
Dacă includeți 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.
În cazul în care copiați acest cod în fișierul .htaccess și postați regulat articole cu imagini (featured photo) pe blog, acestea nu vor mai apărea ca preview. Mai ales dacă alegeți să distribuiți frecvent link-ul pe Facebook, WhatsApp sau alte rețele sociale. Noi l-am dezactivat pentru moment pentru site-ul stackdream.ro.
X-Content-Type-Options
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 ulterior.
# X-Content-Type-Options
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
</IfModule>
De reținut, ca și în cazul oricărui antet de securitate, acesta nu oprește 100% din toate atacurile sau amenințările. Ci le oprește pe unele dintre ele și oferă un alt nivel de protecție pentru site-ul tău web.
Strict-Transport-Security
Strict-Transport-Security (Antetul 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). Dacă nu aveți un certificat SSL/TLS activ nu vă recomandăm activarea acestui cod în fișierul .htaccess. Iar dacă firma de găzduire nu vă oferă, nu este în regulă. Recomandăm citirea următoarelor resurse: https://https.cio.gov/hsts/, https://webmasters.stackexchange.com/questions/115125/hsts-implementation-in-htaccess-when-using-www-subdomain, https://developers.cloudflare.com/ssl/edge-certificates/additional-options/http-strict-transport-security/
Referrer-Policy
Antetul de securitate Referrer-Policy instruiește browserele moderne cum să gestioneze sau să excludă headerul la care se face referire. Controlați dacă politica de referire este sau nu inclusă în cerere.
# Referrer-Policy
<IfModule mod_headers.c>
Header set Referrer-Policy "same-origin"
</IfModule>
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 diferitele reguli și reglementări (de exemplu, GDPR).
Feature-Policy
Antetul Feature-Policy din .htaccess transmite browserelor care funcții sunt permise. De exemplu, puteți permite doar funcția de geo-locație și vibrație. Acest antet vă permite să controlați originea pentru fiecare caracteristică specificată.
# Feature-Policy
<IfModule mod_headers.c>
Header set Feature-Policy "geolocation 'self'; vibrate 'none'"
</IfModule>
Rețineți că acest antet este mai puțin despre securitate și mai mult despre asigurarea unei experiențe fluide pentru utilizatori.
Content-Security-Policy(CSP)
Antetul Content-Security-Policy(CSP) transmite 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. Dacă configurația antetului nu corespunde cerințelor site-ului web, este posibil ca unele resurse să nu se încarce (sau să funcționeze) corect.
Exemplul 1 cu CDN: Permite resurse de la un CDN și nu permite orice conținut încadrat sau pluginuri media:
# Content-Security-Policy
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src https://cdn.example.com; child-src 'none'; object-src 'none'"
</IfModule>
Exemplul 2: Activează resursele de script încărcate dintr-un subdomeniu jQuery și limitează foile de stil și imaginile la domeniul curent ( self)
# Content-Security-Policy
<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>
Toate directivele de securitate .htaccess
Acest cod combină toate anteturile de securitate descrise mai sus. Îl puteți adăuga în fișierul .htaccess.
# 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>
Important: Pot exista note și informații importante pe care trebuie să le înțelegeți cu privire la fiecare directivă .htaccess în particular inclusă în acest fragment de cod. Așadar vă recomandăm să vă informați din surse multiple și de încredere înainte să modificați orice linie de cod, în special dacă nu aveți experiența necesară.
Pentru verificarea securității antetelor folosite pe site-ul tău web îți recomandăm următorul website: https://securityheaders.com/. Scott Helme, consultant în securitatea informațiilor și blogger cu sediul în Marea Britanie, a construit acest instrument online care verifică dacă site-urile web folosesc headere de securitate. Totul a pornit de la implementarea CSP și HSTS pe propriul său site web.
Deși trimiterea antetelor de securitate în fișierul .htaccess nu garantează o apărare de 100% împotriva tuturor acestor atacuri, ajută browserele moderne să mențină lucrurile în siguranță. Adăugați cele mai eficiente antete de securitate HTTP pentru spori securitatea site-ului web, în special dacă utilizați Apache.
Informații suplimentare |
x-content-type-options – X-Content-Type-Options oprește un browser să încerce să mimeze tipul de conținut și îl forțează să rămână cu tipul de conținut declarat. Singura valoare validă pentru acest antet este „X-Content-Type-Options: nosniff”. |
referrer-policy – Politica referințelor este un antet nou care permite unui site să controleze câte informații include browserul cu navigarea departe de un document și ar trebui să fie setată de toate site-urile. |
content-security-policy – Politica de securitate a conținutului este o măsură eficientă pentru a vă proteja site-ul de atacurile XSS. Prin includerea pe lista albă a surselor de conținut aprobat, puteți împiedica browserul să încarce materiale rău intenționate. Analizați această politică mai detaliat. Vă puteți înscrie pentru un cont gratuit pe Report URI pentru a colecta rapoarte despre problemele de pe site-ul dvs. |
permissions-policy – Politica de permisiuni este un nou antet care permite unui site să controleze ce caracteristici și API-uri pot fi utilizate în browser. |
x-xss-protection – X-XSS-Protection stabilește configurația pentru XSS Auditor încorporat în browserele mai vechi. Valoarea recomandată a fost „X-XSS-Protection: 1; mode=block”, dar acum ar trebui să vă uitați la Politica de securitate a conținutului . |
strict-transport-security – HTTP Strict Transport Security este o caracteristică excelentă de susținut pe site-ul dvs. și vă întărește implementarea TLS, determinând User Agent să impună utilizarea HTTPS. |
report-to – activează API-ul de raportare. Acest lucru permite unui site web să colecteze rapoarte din browser despre diverse erori care pot apărea. Vă puteți înscrie pentru un cont gratuit pe URI de raport pentru a colecta aceste rapoarte. |
nel – Înregistrarea erorilor de rețea este un antet nou care instruiește browserul să trimită rapoarte în timpul diferitelor erori de rețea sau de aplicație. Vă puteți înscrie pentru un cont gratuit pe URI de raport pentru a colecta aceste rapoarte. |
server – Valoarea serverului a fost modificată. De obicei, veți vedea valori precum „Microsoft-IIS/8.0” sau „nginx 1.7.2”. |
În ceea ce privește securizarea unui site web este bine să vă concentrați pe minimizarea posibilităților de atac și adăugarea mai multor straturi de securitate. Un Layer puternic pe care îl puteți (și ar trebui) să îl adăugați este reprezentat de anteturile de securitate HTTP adecvate. Când răspundeți la solicitări, configurația serverului sau fișierul .htaccess ar trebui să includă anteturi de securitate care ajută la oprirea activităților nedorite, cum ar fi atacurile XSS , MITM și click-jacking.
Surse și informații:
- Seven Important Security Headers for Your Website – htaccessbook
- Creșteți securitatea cu anteturile X-Security – htaccessbook
- https://securityheaders.com/ – Security Headers
- MDN Docs: X-XSS-Protection – Mozilla Developer
- X-XSS-Protection – Prevenirea atacurilor de scriptare între site-uri – KeyCDN
- Implementare CSP – https://cspvalidator.org/
- Implementare CSP 2: https://csp-evaluator.withgoogle.com/
- CSP Generator: https://csper.io/generator sau https://www.cspisawesome.com/
- Apache HTTP Server Project – https://httpd.apache.org/