Modul 7 · 7.4
Učvršćivanje web-stranice: dozvole, zaglavlja i sigurnosni dodaci
Modul 7: Sigurnost · Vrijeme čitanja: 10 minuta
Cilj učenja: Nakon ove lekcije moći ćete učvrstiti WordPress web-stranicu pomoću dozvola, postavki i sigurnosnih zaglavlja, te procijeniti vrijednost sigurnosnih dodataka.
Ključni pojmovi: učvršćivanje (hardening), dozvole datoteka (644, 755), DISALLOW_FILE_EDIT, bez PHP-a u uploads mapi, popis sadržaja mape, skrivanje verzije, X-Powered-By, sigurnosna zaglavlja, sigurnosne kopije i .git u web-mapi, WAF na poslužitelju, WAF u dodatku, skener zloćudnog softvera (malware)
Što je učvršćivanje
Učvršćivanje znači: postaviti web-stranicu tako da pogreška ili propust uzrokuju manju štetu. Time se ne zamjenjuju ažuriranja i jake lozinke (lekcije 7.2 i 7.3), ali se smanjuju posljedice. Zamislite kuću: ažuriranja su brave, a učvršćivanje je osiguravanje da provalnik koji se ipak probije unutra ne može doći do sefa.
Dozvole datoteka
Svaka datoteka i mapa na poslužitelju ima dozvole: tko smije čitati, pisati i izvršavati. Zapisuju se kao tri znamenke, za vlasnika, grupu i ostale korisnike. Smjernica iz WordPress dokumentacije:
| Što | Dozvole | Značenje |
|---|---|---|
| Mape | 755 | Vlasnik smije sve, ostali smiju čitati i otvarati |
| Datoteke | 644 | Vlasnik smije čitati i pisati, ostali samo čitati |
| wp-config.php | strože, primjerice 600 ili 640 | Samo vlasnik (i eventualno grupa web-poslužitelja) smije čitati |
Koja vrijednost za wp-config.php funkcionira ovisi o tome kako Vaš hosting provider pokreće PHP: kod većine dijeljenog hostinga PHP se pokreće kao Vaš vlastiti korisnik, pa je 600 dovoljno. Isprobajte i provjerite radi li web-stranica i dalje.
Nikada 777. To znači: svatko na poslužitelju smije pisati. Upute koje kažu "postavite mapu na 777 ako prijenos ne radi" rješavaju problem na pogrešan način. Kod dobrog hostinga to nikada nije potrebno.
Postavke u wp-config.php
Nekoliko redaka koji puno znače (iznad "prestanite uređivati"):
// Bez uređivanja datoteka iz administracije (Izgled > Uređivač tema i Dodaci > Uređivač dodataka).
define( 'DISALLOW_FILE_EDIT', true );
// Poruke o pogreškama nikada na ekranu posjetitelja (lekcija 5.4).
define( 'WP_DEBUG', false );Pomoću DISALLOW_FILE_EDIT nestaje uređivač pomoću kojeg se u administraciji mogu mijenjati PHP datoteke tema i dodataka. Provalnik koji preuzme administratorski račun tada ne može s dva klika postaviti zloćudni kod u Vašu temu. Dodaci se i dalje mogu instalirati; ako to također želite zabraniti (primjerice kod web-stranice koju vodite za klijenta), postoji DISALLOW_FILE_MODS, ali tada ni ažuriranja putem administracije više neće raditi.
Bez PHP-a u uploads mapi, bez popisa sadržaja mape
U mapi wp-content/uploads trebaju se nalaziti slike i dokumenti, nikada PHP datoteke. Provalnici koji putem propusta mogu prenijeti datoteku, pokušavaju upravo tamo postaviti PHP datoteku i zatim je pozvati. Blokirajte to pomoću .htaccess datoteke u mapi uploads (kod LiteSpeeda i Apachea):
<Files *.php>
Require all denied
</Files>Isključite i prikazivanje sadržaja mapa. Bez datoteke index.php ili index.html u mapi neki web-poslužitelji prikazuju popis svih datoteka ("Index of /wp-content/uploads/2026/11"). To je izlog za one koji traže sigurnosne kopije ili osjetljive dokumente. U .htaccess datoteci Vaše web-mape:
Options -IndexesMnogi hosting provideri ovo već standardno isključuju. Zadatak ove lekcije to provjerava.
Bez ostataka u web-mapi
Sve u web-mapi može se zatražiti putem weba, osim onoga što poslužitelj izvršava kao PHP ili blokira. Opasni su:
- kopije datoteke wp-config.php (
wp-config.php.bak,wp-config.old,wp-config.php~iz uređivača teksta): one sadrže lozinku Vaše baze podataka i šalju se kao tekst (lekcija 1.3); - sigurnosne kopije poput
backup.zip,site.tar.gzilidatabase.sqlu web-mapi; - mapa
.gitprogramera, pomoću koje netko može preuzeti cijeli Vaš kod (a ponekad i lozinke); - debug.log u mapi wp-content (lekcija 5.4);
- stare instalacijske ili testne datoteke poput
info.phps funkcijomphpinfo().
Sigurnosne kopije čuvajte izvan web-mape ili izvan poslužitelja, i uklonite ostatke.
Skrivanje verzije: mala dobit
WordPress standardno u HTML postavlja:
<meta name="generator" content="WordPress 7.1.4" />i isto u RSS feedu. I PHP se ponekad javlja u zaglavlju: X-Powered-By: PHP/8.3.14. To skrivanje je razumno, ali nemojte od toga previše očekivati: programi provalnika jednostavno isprobavaju propust, bez obzira na verziju koju prikazujete, a verzije se često mogu zaključiti i iz ?ver= iza naziva skripti. Skrivanje je čišćenje, a ne sigurnost. Web-stranica koja skriva svoju verziju, ali se ne ažurira, jednako je ranjiva.
Ovako to učinite, u vlastitom malom dodatku ili u datoteci functions.php Vaše podređene teme (child theme):
remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );A PHP zaglavlje uklonite postavkom expose_php = Off u PHP postavkama Vašeg hosting providera (kod DirectAdmina u Select PHP version, Options), ili pomoću Header unset X-Powered-By u datoteci .htaccess.
Sigurnosna zaglavlja
Pomoću nekoliko zaglavlja govorite pregledniku kako se treba odnositi prema Vašoj web-stranici. Najvažnija:
| Zaglavlje | Što čini |
|---|---|
Strict-Transport-Security | Samo putem https (lekcija 3.1) |
X-Content-Type-Options: nosniff | Preglednik ne pogađa o kojoj se vrsti datoteke radi; sprječava da se preneseni "sličica" izvrši kao skripta |
X-Frame-Options: SAMEORIGIN ili Content-Security-Policy: frame-ancestors 'self' | Druge web-stranice ne smiju prikazivati Vašu web-stranicu u okviru (frame); sprječava clickjacking (nevidljiv gumb Vaše web-stranice ispod gumba druge stranice) |
Referrer-Policy: strict-origin-when-cross-origin | Kod klika na drugu web-stranicu šalje se samo naziv Vaše domene, a ne cijela adresa |
Permissions-Policy | Isključuje funkcije preglednika koje Vaša web-stranica ne koristi (kamera, mikrofon, lokacija) |
Content-Security-Policy | Određuje točno iz kojih izvora smiju dolaziti skripte i stilovi. Moćno, ali teško ispravno podesiti s WordPressom i dodacima; započnite s načinom rada Report-Only |
U .htaccess (kod LiteSpeeda i Apachea):
<IfModule mod_headers.c>
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=()"
</IfModule>Nakon toga provjerite radi li sve: ugrađeni sadržaj, gumbi za plaćanje, widget za razgovor (chat). Vanjski alati poput securityheaders.com i internet.nl pokazuju što Vaša web-stranica šalje.
Sigurnosni dodaci, pošteno sagledani
Postoji mnogo sigurnosnih dodataka (primjerice Wordfence, Solid Security, All-In-One Security, Sucuri). Oni često objedinjuju: vatrozid (firewall), skener zloćudnog softvera (malware), zaštitu prijave, dvofaktorsku autentifikaciju, obavijesti i popis za učvršćivanje. Korisno, ali s ograničenjima:
- Vatrozid u dodatku (WAF) pokreće se tek kada PHP radi. Zloćudni zahtjev prvo mora proći kroz web-poslužitelj i PHP prije nego što ga dodatak vidi. Propust u PHP datoteci koja se poziva izravno, ili napad koji sam PHP teško opterećuje, ne zaustavlja se uvijek. Vatrozid na poslužitelju (primjerice ModSecurity, Imunify360 ili vatrozid Vašeg hosting providera) nalazi se ranije u lancu i zaustavlja više toga, bez da Vaš dodatak obavlja taj posao. Pitajte svog hosting providera što se izvršava na poslužitelju.
- Skener otkriva naknadno. Skener zloćudnog softvera (malware) javlja Vam da nešto nije u redu. To je vrijedno, ali ništa ne sprječava. A skener na istom poslužitelju kao i hakirana web-stranica može i sam biti izmijenjen od strane provalnika.
- Ne zamjenjuju ažuriranja. Dodatak s poznatim propustom ostaje ranjiv, čak i uz sigurnosni dodatak pokraj njega. Neke sigurnosne usluge nude "virtualne zakrpe" koje zaustavljaju poznate napade dok ne ažurirate; korisno kao privremeno rješenje, a ne kao zamjena.
- Sami su dodatak. Više koda, više toga za ažurirati, ponekad i sami imaju propust. A dva sigurnosna dodatka istovremeno često se sukobljavaju.
- Troše računalnu snagu, posebno skeneri koji rade na Vašem vlastitom poslužitelju.
Razuman izbor: prvo provjerite što Vaš hosting provider već čini (vatrozid, skeniranje zloćudnog softvera, blokiranje pokušaja prijave). Dopunite ono što nedostaje, najčešće dvofaktorsku autentifikaciju i ograničavanje pokušaja prijave. Opsežan sigurnosni dodatak posebno je koristan kod hostinga koji sam po sebi čini malo.
Sažetak
- Učvršćivanje ograničava štetu pogreške ili propusta; ne zamjenjuje ažuriranja i lozinke.
- Mape 755, datoteke 644, wp-config.php strože; nikada 777.
- Uključite DISALLOW_FILE_EDIT, blokirajte PHP u uploads mapi, isključite popise sadržaja mapa i uklonite sigurnosne kopije, .git i debug.log iz web-mape.
- Skrivanje verzije je čišćenje, a ne sigurnost; sigurnosna zaglavlja pomažu pregledniku zaštititi Vaše posjetitelje.
- Vatrozid na poslužitelju zaustavlja više nego dodatak; sigurnosni dodaci su dopuna, a ne zamjena.
Kviz
Zadatak
Zadatak A7.4: Što Vaša web-stranica pokazuje svima? Unesite adresu svoje web-stranice. Program čita naslovnu stranicu i RSS feed (/feed/) te provjerava: ne nalazi li se WordPress verzija u oznaci generatora u HTML-u i feedu, ne prikazuje li zaglavlje X-Powered-By PHP verziju, te šalje li Vaša web-stranica X-Content-Type-Options: nosniff, zaštitu od okvira (frame) (X-Frame-Options ili frame-ancestors) i Referrer-Policy? Nedostatak HSTS-a (lekcija 3.1) i Permissions-Policy je dopušten (narančasto).
Zadatak A7.4b: Nema ostataka u mapi web-stranice. Dokažite da je riječ o Vašoj vlastitoj web-stranici (TXT zapis ili datoteka s kodom zadatka). Program zatim provjerava kratak fiksni popis: mapu /wp-content/uploads/ (bez popisa sadržaja mape), /.git/HEAD, /wp-content/debug.log i nekoliko uobičajenih naziva kopija datoteke wp-config.php. Dobro je ako nijedna od njih ne vraća sadržaj (404 ili 403). Program ne pokušava ništa drugo i ništa ne mijenja.
Dodatno čitanje
Ovi članci opisuju korake u kontrolnim pločama WebOké; u drugim kontrolnim pločama rade na sličan način.
- DirectAdmin priručnik 11.5: Prava datoteka i mapa (chmod)
- DirectAdmin priručnik 11.4: Prikaz i uređivanje skrivenih datoteka poput .htaccess
- DirectAdmin priručnik 15.10: Web Application Firewall
- DirectAdmin priručnik 15.11: Imunify360: skeniranje Vaše web stranice na malware
- Blokiranje datoteka putem .htaccess, npr. plugin-googlemap2-proxy.php
- Sigurnost PHP-a
- Učvršćivanje WordPressa (developer.wordpress.org, engleski): https://developer.wordpress.org/advanced-administration/security/hardening/
- Sigurnosna zaglavlja (MDN, engleski): https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#security
