Aktuālā situācija: PHP2Shell. Divas kritiskas PHP ievainojamības (CVSS 9.2) ļauj izpildīt ļaunprātīgu kodu bez pieteikšanās. Ielāpi kopš 21.10.2026.Kas jādara tagad →

Security Header vietnēm: drošības galvenes pareizi iestatīt

Drošības galvenes liek pārlūkam labāk aizsargāt jūsu apmeklētājus. Kā iestatīt svarīgākās galvenes Nginx un Apache, pakāpeniski ieviest Content Security Policy un pārbaudīt rezultātu.

Aktuāls uz 5 min lasīšanas laiksRokasgrāmatas

Īsi: Security Header ir tīmekļa servera norādes pārlūkam, kas aizsargā apmeklētājus pret tādiem uzbrukumiem kā Cross-Site Scripting, Clickjacking un nešifrēti savienojumi. Svarīgākās ir HSTS, Content Security Policy, X-Content-Type-Options, aizsardzība pret svešiem rāmjiem, Referrer-Policy un Permissions-Policy. Tās ir lietderīga nostiprināšana, bet neaizstāj atjauninājumus serverī.

Ko Security Header dara un ko ne

Katrā lapas izsaukumā tīmekļa serveris līdzās saturam sūta arī galvenes. Dažas no tām vada pārlūka drošības funkcijas. Tā, piemēram, var noteikt, ka lapa tiek ielādēta tikai caur HTTPS vai ka pārlūks neizpilda skriptus no svešiem domēniem.

Operatoriem svarīgs ir novērtējums: galvenes galvenokārt aizsargā apmeklētājus, piemēram, pret sesiju nolaupīšanu vai manipulētām veidlapām. Tās neaizver ievainojamības serverī. Ievainojamība PHP, CMS vai paplašinājumā paliek, lai cik labi galvenes būtu iestatītas. Kopā ar tīru kodu tās tomēr būtiski ierobežo daudzu kļūdu sekas.

Svarīgākās Security Header pārskats

Galvene Mērķis Ieteikums kā sākumpunkts
Strict-Transport-Security (HSTS) uzspiež HTTPS turpmākajiem izsaukumiem max-age=31536000; includeSubDomains
Content-Security-Policy (CSP) nosaka atļautos avotus skriptiem, attēliem, rāmjiem individuāli, vispirms kā Report-Only
X-Content-Type-Options neļauj pārlūkam minēt failu tipus nosniff
X-Frame-Options vai CSP frame-ancestors liedz iegulšanu svešās lapās (Clickjacking) SAMEORIGIN vai frame-ancestors 'self'
Referrer-Policy ierobežo, kāda adrese tiek nodota citām lapām strict-origin-when-cross-origin
Permissions-Policy izslēdz pārlūka funkcijas, piemēram, kameru vai atrašanās vietu atļaut tikai nepieciešamās funkcijas

HSTS vajadzētu iestatīt tikai tad, kad visi apakšdomēni ir uzticami pieejami caur HTTPS. Pārlūks šo norādi atceras norādīto laiku; kļūdu tad nevar uzreiz atsaukt. Vajadzības gadījumā sāciet ar īsu darbības laiku un palieliniet to pēc sekmīgiem testiem. Papildu opcija preload domēnu pastāvīgi ieraksta pārlūku ražotāju sarakstos, un to drīkst iestatīt tikai pēc rūpīgas pārbaudes.

Galvenes nav arī vienīgā vieta, kur pārlūks piedāvā aizsardzību. Sīkdatnēm jānes atribūti Secure, HttpOnly un SameSite, lai sesijas netiktu nolaupītas caur nešifrētiem savienojumiem vai skriptiem. Kā to iestatīt PHP, apraksta sesiju ceļvedis.

Security Header iestatīšana Nginx

Nginx galvenes pieder attiecīgās vietnes server blokā. Papildinājums always nodrošina, ka tās tiek sūtītas arī kļūdu lapās.

server {
    # ...
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
    add_header Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data:; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; form-action 'self'" always;

    server_tokens off;
}

Nginx īpatnība: ja location bloks iestata savas add_header direktīvas, galvenes no server bloka tur netiek pārņemtas. Tāpēc pārbaudiet arī apakšlapas un statiskos failus. Papildu nostiprināšanu šai kombinācijai apraksta Nginx ar PHP-FPM nostiprināšana.

Security Header iestatīšana Apache

Apache nepieciešams modulis mod_headers. Direktīvas pieder VirtualHost vai, ja piekļuves tam nav, .htaccess.

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
    Header always set Content-Security-Policy-Report-Only "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'"
</IfModule>

ServerTokens Prod
ServerSignature Off

ServerTokens un ServerSignature pieder galvenajā konfigurācijā. Tās neļauj serverim atbildēs un kļūdu lapās nosaukt savu precīzo versiju. Failā php.ini to pašu PHP panākat ar expose_php = Off.

Content Security Policy pakāpeniska ieviešana

Content Security Policy ir efektīvākā, bet arī prasīgākā galvene. Tā nosaka, no kādiem avotiem drīkst tikt ielādēti skripti, stila lapas, attēli, fonti un rāmji. Ja ievadīts skripts tiek pielādēts no sveša domēna, pārlūks to bloķē.

Modernas vietnes bieži iegulst analīzes rīkus, maksājumu pakalpojumu sniedzējus, karšu pakalpojumus vai video. Pārāk stingra politika tad paralizē funkcijas. Tāpēc rīkojieties pa pakāpēm:

  • Vispirms sākt ar Content-Security-Policy-Report-Only. Pārlūks ziņo par pārkāpumiem izstrādātāju konsolē vai uz savākšanas adresi, bet neko nebloķē.
  • Apzināt visus nepieciešamos avotus un mērķtiecīgi tos atļaut, nevis lietot vispārīgas aizstājējzīmes.
  • Iegultos skriptus pakāpeniski pārvietot uz failiem vai nodrošināt ar Nonce, lai varētu atteikties no 'unsafe-inline'.
  • Tikai pēc testa fāzes bez negaidītiem ziņojumiem pārslēgt uz Content-Security-Policy.
Padoms

CSP papildina tīru eskēpēšanu kodā, bet to neaizstāj. Kā PHP izvadi pareizi nodrošināt, rakstīts ceļvedī Cross-Site Scripting novēršana PHP.

Galvenes pārbaudīt un izvairīties no tipiskām kļūdām

Pēc katras izmaiņas jāpārbauda, vai galvenes patiešām sasniedz galamērķi. To var izdarīt bez papildu rīkiem ar curl:

# Pārbaudīt konfigurāciju un pārlādēt
nginx -t && systemctl reload nginx

# Parādīt sākumlapas un statiska faila galvenes
curl -sI https://www.example.de/ | grep -iE 'strict|content-security|x-content|x-frame|referrer|permissions|server'
curl -sI https://www.example.de/favicon.ico | grep -iE 'strict|x-content'

Tipiskas kļūdas ir dubultas galvenes, ja tīmekļa serveris un lietojumprogramma sūta tās pašas galvenes, pirms servera novietots CDN, kas galvenes noņem vai pārraksta, un galvenes, kas parādās tikai sākumlapā, bet ne pāradresācijās vai kļūdu lapās. Pārbaudiet arī pēc CMS vai drošības paplašinājumu atjauninājumiem, vai galvenes nav mainījušās.

Tāpēc nosakiet vienu vietu, kur galvenes tiek uzturētas, vislabāk tīmekļa serveri vai pirms tā novietoto pakalpojumu. Daudzi CMS paplašinājumi piedāvā iestatījumus arī drošības galvenēm. Tas ir ērti, taču viegli noved pie dubultām vai pretrunīgām norādēm, ja papildus galvenes iestata serveris. Atsevišķiem testiem noder arī pārlūka izstrādātāju rīki: tīkla cilnē katram pieprasījumam redzat atbildes galvenes, un konsole rāda Content Security Policy pārkāpumus.

Kā PHP SOS palīdz konkrēti?

  • Pārbaudām visu jūsu vietņu pašreizējās galvenes, arī aiz CDN un starpniekservera, un parādām robus un pretrunas.
  • Galvenes iestatām centralizēti tīmekļa serverī servera nostiprināšanas ietvaros un pārbaudām sākumlapu, apakšlapas un kļūdu lapas.
  • Content Security Policy ieviešam Report-Only režīmā, izvērtējam ziņojumus un pēc saskaņošanas ieslēdzam izpildi.
  • Kur koda izmaiņas nav iespējamas uzreiz, aizsardzību papildinām ar WAF noteikumiem un virtuālo ielāpošanu.

Biežāk uzdotie jautājumi

Kas ir Security Header?

Security Header ir papildu norādes tīmekļa servera atbildē. Tās pārlūkam, piemēram, norāda, ka lapa jāielādē tikai caur HTTPS, nedrīkst izpildīt svešus skriptus vai lapu rādīt svešos rāmjos. Tās galvenokārt aizsargā apmeklētājus.

Vai Security Header pasargā no PHP2Shell?

Nē. PHP2Shell ir ievainojamība PHP serverī, galvenes darbojas apmeklētāja pārlūkā. Pret PHP2Shell palīdz atjauninājums uz izlabotu PHP versiju un visu darbprocesu pārstartēšana. Galvenes ir papildu nostiprināšana citiem uzbrukumu veidiem.

Vai Content Security Policy var sabojāt manu vietni?

Jā, pārāk stingra politika bloķē nepieciešamos skriptus, fontus vai iegultu saturu. Tāpēc to vispirms ievieš Report Only režīmā, izvērtē ziņojumus un tikai pēc tam pārslēdz uz izpildīšanu.

Vai X-XSS-Protection joprojām ir lietderīga?

Nē. Aktuālie pārlūki šo galveni vairs neizvērtē, un ieteikums ir to izlaist vai iestatīt uz 0. Aizsardzību pret Cross-Site Scripting nodrošina tīra eskēpēšana kodā un Content Security Policy.

Avoti

Tūlītējs kontakts

Katra stunda ir svarīga. Rakstiet mums tūlīt.

Īsi aprakstiet sistēmu, PHP versiju un novēroto. Mēs sazināsimies, noskaidrosim situāciju un strādāsim attālināti, līdz incidents ir slēgts un dokumentēts.

Tūlītēja palīdzība