# Security Header vietnēm: drošības galvenes pareizi iestatīt

> Security Header vietnēm: CSP, HSTS, X-Content-Type-Options un citi ar konfigurācijas piemēriem Nginx un Apache, kā arī pārbaude un tipiskas kļūdas.

Avots: https://phpsos.de/lv/ratgeber/sicherheits-header/  
Aktuāls uz: 25.10.2026  
Pakalpojuma sniedzējs: PHP SOS, PHP ārkārtas palīdzība un serveru drošība. Tūlītēja palīdzība pa WhatsApp: https://wa.me/491736494914?text=Sveiki%2C%20PHP%20SOS%2C%20mums%20nepiecie%C5%A1ama%20pal%C4%ABdz%C4%ABba%20ar%20m%C5%ABsu%20PHP%20serveri.%20Uz%C5%86%C4%93mums%3A%20%E2%80%A6%20Vietne%3A%20%E2%80%A6

**Ī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.

```nginx
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](https://phpsos.de/lv/server/nginx-php-fpm/).

## Security Header iestatīšana Apache

Apache nepieciešams modulis `mod_headers`. Direktīvas pieder VirtualHost vai, ja piekļuves tam nav, `.htaccess`.

```apache
<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](https://phpsos.de/lv/ratgeber/xss-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`:

```bash
# 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](https://phpsos.de/lv/leistungen/server-haertung/) 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](https://phpsos.de/lv/leistungen/waf-virtuelles-patching/).


## 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

- [OWASP Cheat Sheet Series (HTTP Headers)](https://cheatsheetseries.owasp.org/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [BSI: ieteikumi tīmekļa serveriem](https://www.bsi.bund.de/)
