Antete de Securitate în Nginx (HSTS, CSP & X-Frame) în Nginx

Injectarea antetelor HTTP de securitate pentru protecția împotriva atacurilor de tip Clickjacking, XSS și forțarea criptării prin HSTS.

Sintaxă
add_header Strict-Transport-Security ... always;

Chiar dacă o aplicație web este scrisă impecabil, omiterea antetelor de securitate la nivel de server web lasă utilizatorii vulnerabili la atacuri clasice de tip Clickjacking (încărcarea site-ului tău într-un iframe invizibil pe un site malițios), atacuri de tip MIME-sniffing sau interceptări de trafic pe rețele nesigure.

Nginx permite injectarea declarativă a antetelor recomandate de consorțiul OWASP prin directiva add_header însoțită de flagul critic always.

Prin activarea antetelor HSTS (Strict-Transport-Security), X-Frame-Options, X-Content-Type-Options și a politicii Content-Security-Policy (CSP), browserul blochează automat orice tentativă de încărcare neautorizată de scripturi terțe sau de degradare a conexiunii la HTTP nesigur.

Sintaxă, opțiuni și concepte cheie

Opțiune / Concept Descriere practică
Strict-Transport-Security (HSTS) Obligă browserul să acceseze site-ul exclusiv prin HTTPS pentru următorul an (`max-age=31536000`).
X-Frame-Options "SAMEORIGIN" Previne încărcarea site-ului în iframe-uri pe domenii externe (anti-Clickjacking).
X-Content-Type-Options "nosniff" Oprește browserul din a ghici tipul MIME al fișierelor, blocând execuția scripturilor mascate ca imagini.
always Parametrul obligatoriu ce forțează Nginx să trimită antetele chiar și la răspunsuri de eroare (404, 500).

Exemple practice și cod

Exemplul 1: Pachet complet de antete de securitate recomandat pentru Nginx

Blocul standard de hardening ce se include în fișierul de server.

# Inserat în blocul server { ... }:

# 1. HSTS forțat cu includerea subdomeniilor:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

# 2. Protecție împotriva atacurilor de iframe:
add_header X-Frame-Options "SAMEORIGIN" always;

# 3. Blocare MIME-type sniffing:
add_header X-Content-Type-Options "nosniff" always;

# 4. Politică de Referrer curată:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

# 5. Politică de permisiuni hardware:
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

Rezultat & Impact

Scor maxim de securitate la auditurile automate de conformitate web.

Greșeli frecvente și bune practici

  • Omiterea cuvântului cheie `always` la finalul directivei `add_header`, ceea ce face ca Nginx să nu trimită antetele pe paginile de eroare 404 sau 500.
  • Definirea unei directive `add_header` într-un bloc `location` interior, ceea ce anulează automat toate antetele moștenite din blocul părinte `server` (comportament specific Nginx).

Ghiduri și noțiuni înrudite