Modul 7 · 7.4
Utrjevanje spletnega mesta: pravice, glave in varnostni vtičniki
Modul 7: Varnost · Čas branja: 10 minut
Učni cilj: Po tej lekciji boste znali utrditi spletno mesto WordPress s pravicami do datotek, nastavitvami in varnostnimi glavami, ter realno oceniti varnostne vtičnike.
Ključni pojmi: utrjevanje (hardening), pravice do datotek (644, 755), DISALLOW_FILE_EDIT, brez PHP v mapi uploads, seznam vsebine mape, skrivanje različice, X-Powered-By, varnostne glave, varnostne kopije in .git v spletni mapi, WAF na strežniku, WAF v vtičniku, pregledovalnik zlonamerne programske opreme (malware scanner)
Kaj je utrjevanje
Utrjevanje pomeni: spletno mesto nastaviti tako, da napaka ali varnostna luknja povzroči čim manj škode. To ne nadomesti posodobitev in močnih gesel (lekcija 7.2 in 7.3), ampak zmanjša posledice. Pomislite na hišo: posodobitve so ključavnice, utrjevanje pa poskrbi, da vlomilec, ki je vseeno prišel noter, ne pride do sefa.
Pravice do datotek
Vsaka datoteka in vsaka mapa na strežniku ima pravice: kdo sme brati, pisati in izvajati. Zapisane so kot tri številke, za lastnika, skupino in preostali svet. Priporočilo iz dokumentacije WordPressa:
| Kaj | Pravice | Pomen |
|---|---|---|
| Mape | 755 | Lastnik sme vse, drugi smejo brati in odpirati |
| Datoteke | 644 | Lastnik sme brati in pisati, drugi samo brati |
| wp-config.php | strožje, na primer 600 ali 640 | Samo lastnik (in po potrebi skupina spletnega strežnika) sme brati |
Katera vrednost za wp-config.php deluje, je odvisno od tega, kako Vaš ponudnik gostovanja poganja PHP: pri večini deljenega gostovanja PHP teče kot Vaš lastni uporabnik, in takrat zadostuje 600. Poskusite in preverite, ali spletno mesto še vedno deluje.
Nikoli 777. To pomeni: vsakdo na strežniku sme pisati. Navodilo, ki pravi "nastavite mapo na 777, če nalaganje ne deluje", rešuje težavo na napačen način. Pri dobrem gostovanju to sploh ni potrebno.
Nastavitve v wp-config.php
Nekaj vrstic, ki veliko pomagajo (nad "stop z urejanjem"):
// Brez urejanja datotek iz nadzorne plošče (Videz > Urejevalnik tem in Vtičniki > Urejevalnik vtičnikov).
define( 'DISALLOW_FILE_EDIT', true );
// Sporočila o napakah nikoli na zaslonu obiskovalcev (lekcija 5.4).
define( 'WP_DEBUG', false );Z DISALLOW_FILE_EDIT izgine urejevalnik, s katerim lahko v nadzorni plošči spreminjate datoteke PHP tem in vtičnikov. Vlomilec, ki prevzame skrbniški račun, tako z dvema klikoma ne more vstaviti zlonamerne kode v Vašo temo. Vtičnike lahko še vedno nameščate; če želite prepovedati tudi to (na primer pri spletnem mestu, ki ga upravljate za stranko), obstaja DISALLOW_FILE_MODS, vendar potem tudi posodobitve prek nadzorne plošče ne delujejo več.
Brez PHP v mapi uploads, brez seznama vsebine mape
V wp-content/uploads spadajo slike in dokumenti, nikoli datoteke PHP. Vlomilci, ki lahko prek varnostne luknje naložijo datoteko, poskušajo tja namestiti prav datoteko PHP in jo nato poklicati. To blokirajte z datoteko .htaccess v mapi uploads (pri LiteSpeed in Apache):
<Files *.php>
Require all denied
</Files>Izklopite tudi prikaz vsebine map. Brez index.php ali index.html v mapi nekateri spletni strežniki prikažejo seznam vseh datotek ("Index of /wp-content/uploads/2026/11"). To je izložba za vsakogar, ki išče varnostne kopije ali občutljive dokumente. V datoteki .htaccess Vaše spletne mape:
Options -IndexesVeliko ponudnikov gostovanja ima to že privzeto izklopljeno. Naloga te lekcije to preveri.
Brez ostankov v spletni mapi
Vse v spletni mapi je prek spleta dostopno, razen tistega, kar strežnik izvede kot PHP ali blokira. Nevarni so:
- kopije datoteke wp-config.php (
wp-config.php.bak,wp-config.old,wp-config.php~iz urejevalnika besedil): te vsebujejo geslo Vaše podatkovne baze in se pošljejo kot navadno besedilo (lekcija 1.3); - varnostne kopije, kot so
backup.zip,site.tar.gzalidatabase.sqlv spletni mapi; - mapa
.gitrazvijalca, s katero lahko nekdo prenese celotno Vašo kodo (in včasih gesla); - debug.log v wp-content (lekcija 5.4);
- stare namestitvene ali testne datoteke, kot je
info.phpsphpinfo().
Varnostne kopije hranite zunaj spletne mape ali zunaj strežnika in počistite ostanke.
Skrivanje različice: majhna korist
WordPress privzeto doda v HTML:
<meta name="generator" content="WordPress 7.1.4" />in enako v vir RSS. Tudi PHP se včasih izda v glavi: X-Powered-By: PHP/8.3.14. To skriti je smiselno, vendar od tega ne pričakujte preveč: programi vlomilcev varnostno luknjo preprosto preizkusijo, ne glede na prikazano različico, poleg tega je različico pogosto mogoče razbrati tudi iz ?ver= za skriptami. Skrivanje je pospravljanje, ne varnost. Spletno mesto, ki skriva svojo različico, a ga ne posodablja, je prav tako ranljivo.
Tako to storite, v lastnem majhnem vtičniku ali v datoteki functions.php Vaše podrejene teme (child theme):
remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );In glavo PHP z expose_php = Off v nastavitvah PHP pri Vašem ponudniku gostovanja (pri DirectAdmin v Select PHP version, Options), ali z Header unset X-Powered-By v .htaccess.
Varnostne glave
Z nekaj glavami poveste brskalniku, kako naj ravna z Vašim spletnim mestom. Najpomembnejše:
| Glava | Kaj naredi |
|---|---|
Strict-Transport-Security | Samo še prek https (lekcija 3.1) |
X-Content-Type-Options: nosniff | Brskalnik ne ugiba, kakšna datoteka je nekaj; prepreči, da bi naloženo "sliko" izvedel kot skripto |
X-Frame-Options: SAMEORIGIN ali Content-Security-Policy: frame-ancestors 'self' | Druga spletna mesta ne smejo prikazati Vašega spletnega mesta v okviru (frame); prepreči clickjacking (nevidni gumb Vašega spletnega mesta pod gumbom drugega) |
Referrer-Policy: strict-origin-when-cross-origin | Ob kliku na drugo spletno mesto se posreduje samo Vaše domensko ime, ne celoten naslov |
Permissions-Policy | Izklopi funkcije brskalnika, ki jih Vaše spletno mesto ne uporablja (kamera, mikrofon, lokacija) |
Content-Security-Policy | Natančno določa, iz katerih virov smejo prihajati skripte in slogi. Zmogljivo, vendar težko pravilno nastaviti pri WordPressu in vtičnikih; začnite z načinom Report-Only |
V .htaccess (pri LiteSpeed in Apache):
<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>Nato preverite, ali vse še deluje: vgrajena vsebina, plačilni gumbi, klepetalni pripomoček (chat widget). Zunanja orodja, kot sta securityheaders.com in internet.nl, pokažejo, kaj Vaše spletno mesto pošilja.
Varnostni vtičniki, pošteno ocenjeni
Obstaja veliko varnostnih vtičnikov (na primer Wordfence, Solid Security, All-In-One Security, Sucuri). Pogosto združujejo: požarni zid, pregledovalnik zlonamerne programske opreme, zaščito prijave, dvostopenjsko preverjanje, obvestila in seznam za utrjevanje. Koristni, vendar z omejitvami:
- Požarni zid v vtičniku (WAF) se zažene šele, ko teče PHP. Zlonamerna zahteva mora najprej skozi spletni strežnik in PHP, preden jo vtičnik sploh opazi. Varnostne luknje v datoteki PHP, ki je poklicana neposredno, ali napada, ki močno obremeni sam PHP, ne zaustavi vedno. Požarni zid na strežniku (na primer ModSecurity, Imunify360 ali požarni zid Vašega ponudnika gostovanja) je prej v verigi in ustavi več, ne da bi Vaš paket opravljal računsko delo. Vprašajte Vašega ponudnika gostovanja, kaj teče na strežniku.
- Pregledovalnik najde šele naknadno. Pregledovalnik zlonamerne programske opreme Vam pove, da je nekaj narobe. To je dragoceno, vendar nič ne prepreči. Pregledovalnik na istem strežniku kot vdrto spletno mesto je lahko tudi sam spremenjen s strani vlomilca.
- Ne nadomestijo posodobitev. Vtičnik z znano varnostno luknjo ostane ranljiv, tudi z varnostnim vtičnikom zraven. Nekatere varnostne storitve ponujajo "virtualne popravke", ki znane napade ustavijo, dokler ne posodobite; priročno kot premostitev, ne kot nadomestilo.
- Sami so vtičnik. Več kode, več za posodabljati, včasih imajo sami varnostno luknjo. In dva varnostna vtičnika hkrati se pogosto spreta.
- Zahtevajo računsko moč, zlasti pregledovalniki, ki tečejo na Vašem lastnem strežniku.
Razumna izbira: najprej preverite, kaj Vaš ponudnik gostovanja že počne (požarni zid, pregled zlonamerne programske opreme, blokiranje poskusov prijave). Dopolnite, kar manjka, največkrat dvostopenjsko preverjanje in omejevanje poskusov prijave. Obsežen varnostni vtičnik je koristen zlasti pri gostovanju, ki samo malo počne.
Povzetek
- Utrjevanje omeji škodo napake ali varnostne luknje; ne nadomesti posodobitev in gesel.
- Mape 755, datoteke 644, wp-config.php strožje; nikoli 777.
- Vklopite DISALLOW_FILE_EDIT, blokirajte PHP v mapi uploads, izklopite seznam vsebine map ter počistite varnostne kopije, .git in debug.log iz spletne mape.
- Skrivanje različice je pospravljanje, ne varnost; varnostne glave pomagajo brskalniku zaščititi Vaše obiskovalce.
- Požarni zid na strežniku ustavi več kot vtičnik; varnostni vtičniki so dopolnilo, ne nadomestilo.
Kviz
Naloga
Naloga A7.4: Kaj Vaše spletno mesto pokaže vsem? Vnesite naslov svojega spletnega mesta. Program prebere domačo stran in vir RSS (/feed/) ter preveri: ali v oznaki generator v HTML in viru ni navedene različice WordPressa, ali glava X-Powered-By ne razkriva različice PHP, in ali Vaše spletno mesto pošilja X-Content-Type-Options: nosniff, zaščito pred okviri (frame) (X-Frame-Options ali frame-ancestors) in Referrer-Policy? Če manjkata HSTS (lekcija 3.1) in Permissions-Policy, je to dovoljeno (oranžno).
Naloga A7.4b: Brez ostankov v spletni mapi. Dokažite, da je to Vaše lastno spletno mesto (zapis TXT ali datoteka s kodo naloge). Program nato preveri kratek stalen seznam: mapo /wp-content/uploads/ (brez seznama vsebine mape), /.git/HEAD, /wp-content/debug.log in nekaj pogostih imen kopij datoteke wp-config.php. Dobro je, če nobena od njih ne vrne vsebine (404 ali 403). Program ne preizkuša ničesar drugega in ničesar ne spreminja.
Dodatno branje
Ti članki opisujejo korake v nadzornih ploščah WebOké; v drugih nadzornih ploščah delujejo podobno.
- Priročnik DirectAdmin 11.5: Pravice datotek in map (chmod)
- Priročnik DirectAdmin 11.4: Prikaz in urejanje skritih datotek, kot je .htaccess
- Priročnik DirectAdmin 15.10: Požarni zid spletne aplikacije
- Priročnik DirectAdmin 15.11: Imunify360: skeniranje Vaše spletne strani za zlonamerno programsko opremo
- Blokiranje datotek prek .htaccess, na primer plugin-googlemap2-proxy.php
- Varnost PHP
- Utrjevanje WordPressa (developer.wordpress.org, angleško): https://developer.wordpress.org/advanced-administration/security/hardening/
- Varnostne glave (MDN, angleško): https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#security
