Moodul 7 · 7.4
Saidi tugevdamine: õigused, päised ja turvapluginad
Moodul 7: Turvalisus · Lugemisaeg: 10 minutit
Õpieesmärk: pärast seda õppetundi oskad WordPressi saiti tugevdada õiguste, seadete ja turvapäistega ning hinnata turvapluginate tegelikku väärtust.
Põhimõisted: tugevdamine (hardening), failiõigused (644, 755), DISALLOW_FILE_EDIT, PHP keelamine uploads-kaustas, kaustade loetelu, versiooni peitmine, X-Powered-By, turvapäised, varukoopiafailid ja .git veebikaustas, WAF serveris, WAF pluginas, pahavaraskanner
Mis on tugevdamine
Tugevdamine tähendab: sait seadistada nii, et viga või lekk tekitaks võimalikult vähe kahju. See ei asenda uuendusi ega tugevaid paroole (õppetund 7.2 ja 7.3), aga vähendab tagajärgi. Mõtle majale: uuendused on lukud, tugevdamine tagab, et sissemurdja, kes siiski sisse pääseb, ei saa kätte seifi.
Failiõigused
Igal failil ja kaustal serveris on õigused: kes tohib lugeda, kirjutada ja käivitada. Need kirjutatakse kolme numbrina: omaniku, grupi ja kõigi teiste jaoks. WordPressi dokumentatsiooni soovitus:
| Mis | Õigused | Tähendus |
|---|---|---|
| Kaustad | 755 | Omanik tohib kõike, teised tohivad lugeda ja avada |
| Failid | 644 | Omanik tohib lugeda ja kirjutada, teised ainult lugeda |
| wp-config.php | rangem, näiteks 600 või 640 | Ainult omanik (ja vajadusel veebiserveri grupp) tohib lugeda |
Milline väärtus wp-config.php jaoks sobib, sõltub sellest, kuidas su majutuspakkuja PHP-d käitab: enamiku jagatud majutuste puhul töötab PHP sinu enda kasutajana ja siis piisab väärtusest 600. Proovi järele ja vaata, kas sait töötab endiselt.
Mitte kunagi 777. See tähendab: kõik serveris tohivad kirjutada. Juhend, mis ütleb „pane kaust 777-le, kui üleslaadimine ei toimi“, lahendab probleemi valesti. Hea majutuse puhul pole seda kunagi vaja.
Seaded failis wp-config.php
Mõned read, mis annavad palju kasu (enne märget „Lõpeta redigeerimine siit!“):
// Failide redigeerimine haldusest keelatud (Välimus > Teema redaktor ja Pluginad > Plugina redaktor).
define( 'DISALLOW_FILE_EDIT', true );
// Veateateid ei kuvata kunagi külastajate ekraanil (õppetund 5.4).
define( 'WP_DEBUG', false );DISALLOW_FILE_EDIT kasutamisel kaob redaktor, millega saab haldusest teemade ja pluginate PHP-faile muuta. Sissemurdja, kes võtab üle administraatori konto, ei saa siis kahe klikiga su teemasse kahjulikku koodi lisada. Pluginate installimine on endiselt võimalik; kui soovid ka seda keelata (näiteks saidil, mida haldad kliendi jaoks), on olemas DISALLOW_FILE_MODS, aga siis ei tööta ka uuendused haldusest enam.
PHP keelatud uploads-kaustas, kaustade loetelu välja
Kaustas wp-content/uploads peaksid olema pildid ja dokumendid, mitte kunagi PHP-failid. Sissemurdjad, kes saavad lekke kaudu faili üles laadida, proovivad just sinna PHP-faili panna ja selle siis avada. Blokeeri see .htaccess-failiga uploads-kaustas (LiteSpeedi ja Apache puhul):
<Files *.php>
Require all denied
</Files>Lülita välja ka kaustade sisu kuvamine. Kui kaustas pole faili index.php ega index.html, näitavad mõned veebiserverid kõigi failide loetelu („Index of /wp-content/uploads/2026/11“). See on nagu vaateaken neile, kes otsivad varukoopiaid või tundlikke dokumente. Oma veebikausta .htaccess-failis:
Options -IndexesPaljud majutuspakkujad on selle juba vaikimisi välja lülitanud. Selle õppetunni ülesanne kontrollib seda.
Ei mingeid jääke veebikaustas
Kõik veebikaustas on veebi kaudu kättesaadav, välja arvatud see, mida server PHP-na käivitab või blokeerib. Ohtlikud on:
- wp-config.php koopiad (
wp-config.php.bak,wp-config.old,wp-config.php~tekstiredaktorist): need sisaldavad su andmebaasi parooli ja saadetakse tekstina (õppetund 1.3); - varukoopiad nagu
backup.zip,site.tar.gzvõidatabase.sqlveebikaustas; - arendaja
.git-kaust, mille abil saab keegi alla laadida kogu su koodi (ja mõnikord ka paroole); - debug.log kaustas wp-content (õppetund 5.4);
- vanad installi- või testifailid nagu
info.phpkoosphpinfo()-ga.
Hoia varukoopiaid väljaspool veebikausta või väljaspool serverit ja korista jäägid ära.
Versiooni peitmine: väike võit
WordPress lisab vaikimisi HTML-i:
<meta name="generator" content="WordPress 7.1.4" />ja sama RSS-voos. Ka PHP annab end mõnikord päises üles: X-Powered-By: PHP/8.3.14. Selle peitmine on mõistlik, aga ära looda sellest liiga palju: sissemurdjate programmid proovivad lekke lihtsalt ära, olenemata näidatavast versioonist, ja versiooni saab tihti tuletada ka skriptide järel olevast ?ver=-st. Peitmine on korrastamine, mitte turvalisus. Sait, mis peidab oma versiooni, aga ei uuenda, on sama haavatav.
Nii teed seda, oma väikeses pluginas või child theme'i failis functions.php:
remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );Ja PHP päise saad eemaldada seadega expose_php = Off oma majutuspakkuja PHP seadetes (DirectAdminis Select PHP version, Options), või lisades Header unset X-Powered-By faili .htaccess.
Turvapäised
Mõne päisega ütled brauserile, kuidas su saidiga käituda. Kõige tähtsamad:
| Päis | Mida see teeb |
|---|---|
Strict-Transport-Security | Ainult https kaudu (õppetund 3.1) |
X-Content-Type-Options: nosniff | Brauser ei hakka arvama, mis tüüpi fail miski on; takistab, et üleslaaditud „pilt“ käivitatakse skriptina |
X-Frame-Options: SAMEORIGIN või Content-Security-Policy: frame-ancestors 'self' | Teised saidid ei tohi sinu saiti raamis näidata; takistab clickjacking'ut (sinu saidi nähtamatu nupp teise saidi all) |
Referrer-Policy: strict-origin-when-cross-origin | Teisele saidile klõpsates liigub kaasa ainult su domeeninimi, mitte kogu aadress |
Permissions-Policy | Lülitab välja brauserifunktsioonid, mida su sait ei kasuta (kaamera, mikrofon, asukoht) |
Content-Security-Policy | Määrab täpselt, millistest allikatest tohivad skriptid ja stiilid tulla. Võimas, aga WordPressi ja pluginatega keeruline korralikult seadistada; alusta Report-Only režiimist |
Failis .htaccess (LiteSpeedi ja Apache puhul):
<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>Testi pärast seda, kas kõik töötab: manustatud sisu, maksenupud, vestlusvidin. Välised tööriistad nagu securityheaders.com ja internet.nl näitavad, mida su sait tegelikult saadab.
Turvapluginad, ausalt vaadatuna
Turvapluginaid on palju (näiteks Wordfence, Solid Security, All-In-One Security, Sucuri). Need koondavad sageli: tulemüüri, pahavaraskanneri, sisselogimiskaitse, kaheastmelise autentimise, teavitused ja tugevdamisnimekirja. Kasulikud, aga oma piiridega:
- Pluginas olev tulemüür (WAF) käivitub alles siis, kui PHP töötab. Kahjulik päring peab enne läbima veebiserveri ja PHP, enne kui plugin selle näeb. Lekke, mis on otse kutsutavas PHP-failis, või rünnakut, mis koormab PHP-d ennast tugevalt, ei suuda see alati peatada. Serveris olev tulemüür (näiteks ModSecurity, Imunify360 või sinu majutuspakkuja enda tulemüür) asub ahelas varasemas kohas ja peatab rohkem, ilma et sinu pakett peaks arvutustööd tegema. Küsi oma majutuspakkujalt, mis serveris töötab.
- Skanner leiab asjad tagantjärele. Pahavaraskanner ütleb sulle, et midagi on valesti. See on väärtuslik, aga ei hoia midagi ära. Ja skanner samal serveril, mis on häkitud, võib ka ise sissemurdja poolt muudetud olla.
- Need ei asenda uuendusi. Plugin tuntud lekkega jääb lekkivaks, ka koos turvaplugina olemasoluga. Mõned turvateenused pakuvad „virtuaalseid paiku“, mis peatavad tuntud rünnakuid kuni uuenduse tegemiseni; kasulik ajutise lahendusena, mitte asendusena.
- Need on ise ka pluginad. Rohkem koodi, rohkem uuendamist, mõnikord lekk ka endal. Ja kaks turvapluginat korraga põrkuvad tihti kokku.
- Need nõuavad arvutusvõimsust, eriti skannerid, mis töötavad sinu enda serveris.
Mõistlik valik: vaata kõigepealt, mida su majutuspakkuja juba teeb (tulemüür, pahavaraskaneering, sisselogimiskatsete blokeerimine). Täienda seda, mis puudub, enamasti kaheastmeline autentimine ja sisselogimiskatsete piiramine. Põhjalik turvaplugin on eriti kasulik majutuse puhul, mis ise vähe teeb.
Kokkuvõte
- Tugevdamine piirab vea või lekke kahju; see ei asenda uuendusi ega paroole.
- Kaustad 755, failid 644, wp-config.php rangem; mitte kunagi 777.
- Lülita sisse DISALLOW_FILE_EDIT, blokeeri PHP uploads-kaustas, lülita välja kaustade loetelu ja korista veebikaustast varukoopiad, .git ja debug.log.
- Versiooni peitmine on korrastamine, mitte turvalisus; turvapäised aitavad brauseril su külastajaid kaitsta.
- Serveris olev tulemüür peatab rohkem kui plugin; turvapluginad on täiendus, mitte asendus.
Test (quiz)
Ülesanne
Ülesanne A7.4: Mida su sait kõigile näitab? Sisesta oma saidi aadress. Programm loeb avalehte ja RSS-voogu (/feed/) ning kontrollib: kas HTML-i ja voo generator-sildis ei ole WordPressi versiooni, kas päis X-Powered-By ei näita PHP versiooni, ning kas su sait saadab X-Content-Type-Options: nosniff, kaitset raamide vastu (X-Frame-Options või frame-ancestors) ja Referrer-Policy't? HSTS (õppetund 3.1) ja Permissions-Policy puudumine on lubatud (oranž).
Ülesanne A7.4b: Veebikaustas pole jääke. Tõesta, et see on sinu enda sait (TXT-kirje või fail ülesande koodiga). Seejärel küsib programm lühikese kindla nimekirja: kaust /wp-content/uploads/ (kaustade loetelu peab puuduma), /.git/HEAD, /wp-content/debug.log ja mõned levinud wp-config.php koopiate nimed. Hea on see, kui ükski neist ei anna sisu tagasi (404 või 403). Programm ei proovi midagi muud ega muuda midagi.
Lisalugemist
Need artiklid kirjeldavad samme WebOké paneelides; teistes paneelides toimib see sarnaselt.
- DirectAdmin juhend 11.5: Failide ja kaustade õigused (chmod)
- DirectAdmin juhend 11.4: Peidetud failide, näiteks .htaccess, kuvamine ja muutmine
- DirectAdmin juhend 15.10: Web Application Firewall
- DirectAdmin juhend 15.11: Imunify360: sinu veebilehe skannimine pahavara suhtes
- Failide blokeerimine .htaccess-i kaudu, nt plugin-googlemap2-proxy.php
- PHP turvalisus
- WordPressi tugevdamine (developer.wordpress.org, inglise keeles): https://developer.wordpress.org/advanced-administration/security/hardening/
- Turvapäised (MDN, inglise keeles): https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#security
