Modul 7 · 7.4
Zabezpečenie stránky: oprávnenia, hlavičky a bezpečnostné pluginy
Modul 7: Zabezpečenie · Čas čítania: 10 minút
Cieľ lekcie: Po tejto lekcii dokážete zabezpečiť WordPress stránku pomocou oprávnení, nastavení a bezpečnostných hlavičiek a vedieť reálne zhodnotiť prínos bezpečnostných pluginov.
Kľúčové pojmy: zabezpečenie (hardening), oprávnenia súborov (644, 755), DISALLOW_FILE_EDIT, žiadne PHP v uploads, zoznam súborov priečinka, skrytie verzie, X-Powered-By, bezpečnostné hlavičky, záložné súbory a .git vo webovom priečinku, WAF na serveri, WAF v pluginu, malvérový skener
Čo je zabezpečenie (hardening)
Zabezpečenie (hardening) znamená: nastaviť stránku tak, aby chyba alebo únik spôsobili čo najmenšiu škodu. Nenahrádza to aktualizácie a silné heslá (lekcia 7.2 a 7.3), ale zmenšuje to následky. Predstavte si dom: aktualizácie sú zámky, zabezpečenie je zariadenie, vďaka ktorému sa votrelec, aj keď sa dostane dnu, nedostane k trezoru.
Oprávnenia súborov
Každý súbor a priečinok na serveri má oprávnenia: kto smie čítať, zapisovať a spúšťať. Zapisujú sa ako tri číslice, pre vlastníka, skupinu a ostatný svet. Odporúčanie z dokumentácie WordPressu:
| Čo | Oprávnenia | Význam |
|---|---|---|
| Priečinky | 755 | Vlastník môže všetko, ostatní môžu čítať a otvárať |
| Súbory | 644 | Vlastník môže čítať a zapisovať, ostatní len čítať |
| wp-config.php | prísnejšie, napríklad 600 alebo 640 | Čítať smie len vlastník (prípadne aj skupina webového servera) |
Ktorá hodnota pre wp-config.php funguje, závisí od toho, ako váš hosting spúšťa PHP: pri väčšine zdieľaného hostingu beží PHP pod vaším vlastným užívateľským účtom, a vtedy stačí 600. Vyskúšajte to a overte, či stránka ešte funguje.
Nikdy 777. To znamená: zapisovať smie ktokoľvek na serveri. Návod, ktorý hovorí „nastavte priečinok na 777, ak nahrávanie nefunguje“, rieši problém nesprávne. Pri kvalitnom hostingu to navyše nikdy nie je potrebné.
Nastavenia v wp-config.php
Niekoľko riadkov, ktoré veľa zmenia (pred riadkom „to je všetko, viac už neupravujte“):
// Zákaz úprav súborov z administrácie (Vzhľad > Editor tém a Pluginy > Editor pluginov).
define( 'DISALLOW_FILE_EDIT', true );
// Chybové hlásenia nikdy nezobrazovať návštevníkom (lekcia 5.4).
define( 'WP_DEBUG', false );Pomocou DISALLOW_FILE_EDIT zmizne editor, cez ktorý je možné v administrácii upravovať PHP súbory tém a pluginov. Votrelec, ktorý prevezme kontrolu nad účtom administrátora, tak nemôže na dva kliknutia vložiť škodlivý kód do vašej témy. Inštalovanie pluginov je stále možné; ak chcete zakázať aj to (napríklad pri stránke, ktorú spravujete pre klienta), existuje DISALLOW_FILE_MODS, no vtedy prestanú fungovať aj aktualizácie cez administráciu.
Žiadne PHP v uploads, žiadny zoznam priečinka
V priečinku wp-content/uploads majú byť obrázky a dokumenty, nikdy nie PHP súbory. Votrelci, ktorí dokážu cez nejakú chybu nahrať súbor, sa práve snažia umiestniť tam PHP súbor a následne ho vyvolať. Zablokujte to pomocou .htaccess v priečinku uploads (pri LiteSpeed a Apache):
<Files *.php>
Require all denied
</Files>Vypnite tiež zobrazovanie obsahu priečinkov. Bez index.php alebo index.html v priečinku niektoré webové servery zobrazia zoznam všetkých súborov („Index of /wp-content/uploads/2026/11“). To je výklad pre niekoho, kto hľadá zálohy alebo citlivé dokumenty. V .htaccess vášho webového priečinka:
Options -IndexesMnohí hostingoví poskytovatelia majú toto predvolene vypnuté. Úloha tejto lekcie to overí.
Žiadne zvyšky vo webovom priečinku
Všetko vo webovom priečinku je dostupné cez web, okrem toho, čo server spracuje ako PHP alebo zablokuje. Nebezpečné sú:
- kópie wp-config.php (
wp-config.php.bak,wp-config.old,wp-config.php~z textového editora): tie obsahujú heslo k databáze a odošlú sa ako obyčajný text (lekcia 1.3); - zálohy ako
backup.zip,site.tar.gzalebodatabase.sqlvo webovom priečinku; - priečinok
.gitod vývojára, pomocou ktorého si môže niekto stiahnuť celý váš kód (a niekedy aj heslá); - debug.log v priečinku wp-content (lekcia 5.4);
- staré inštalačné alebo testovacie súbory, ako je
info.phpsphpinfo().
Zálohy uchovávajte mimo webového priečinka alebo mimo servera a zvyšky priebežne odstraňujte.
Skrytie verzie: malý prínos
WordPress štandardne vkladá do HTML:
<meta name="generator" content="WordPress 7.1.4" />a to isté do RSS kanála. Aj PHP sa niekedy prihlási v hlavičke: X-Powered-By: PHP/8.3.14. Skrytie toho je rozumný krok, no neočakávajte od neho priveľa: útočné programy jednoducho skúšajú zraniteľnosti bez ohľadu na zobrazenú verziu a verzie sa často dajú odvodiť aj z ?ver= za skriptami. Skrytie je upratovanie, nie zabezpečenie. Stránka, ktorá skrýva verziu, no neaktualizuje sa, je rovnako zraniteľná.
Spravíte to takto, vo vlastnom malom pluginu alebo v functions.php vašej podradenej témy (child theme):
remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );A PHP hlavičku pomocou expose_php = Off v nastaveniach PHP u vášho hostingového poskytovateľa (pri DirectAdmin v časti Select PHP version, Options), alebo pomocou Header unset X-Powered-By v .htaccess.
Bezpečnostné hlavičky
Pomocou niekoľkých hlavičiek poviete prehliadaču, ako sa má k vašej stránke správať. Najdôležitejšie z nich:
| Hlavička | Čo robí |
|---|---|
Strict-Transport-Security | Len cez https (lekcia 3.1) |
X-Content-Type-Options: nosniff | Prehliadač neháda, o aký typ súboru ide; zabraňuje, aby bol nahraný „obrázok“ spustený ako skript |
X-Frame-Options: SAMEORIGIN alebo Content-Security-Policy: frame-ancestors 'self' | Iné stránky nesmú zobraziť vašu stránku vo frame; zabraňuje clickjackingu (neviditeľné tlačidlo vašej stránky skryté pod tlačidlom inej stránky) |
Referrer-Policy: strict-origin-when-cross-origin | Pri kliknutí na odkaz na inú stránku sa odošle len vaša doména, nie celá adresa |
Permissions-Policy | Vypína funkcie prehliadača, ktoré vaša stránka nepoužíva (kamera, mikrofón, poloha) |
Content-Security-Policy | Presne určuje, z akých zdrojov smú pochádzať skripty a štýly. Je to účinné, no náročné na správne nastavenie pri WordPresse a pluginoch; začnite v režime Report-Only |
V .htaccess (pri LiteSpeed a 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>Potom otestujte, či všetko funguje: vložený obsah, tlačidlá na platbu, chatový widget. Externé nástroje ako securityheaders.com a internet.nl ukážu, čo vaša stránka naozaj odosiela.
Bezpečnostné pluginy, úprimne zhodnotené
Existuje mnoho bezpečnostných pluginov (napríklad Wordfence, Solid Security, All-In-One Security, Sucuri). Často v sebe spájajú: firewall, malvérový skener, ochranu prihlásenia, dvojfaktorové overenie, upozornenia a zoznam opatrení na zabezpečenie. Užitočné, no s obmedzeniami:
- Firewall v pluginu (WAF) sa spustí až keď beží PHP. Škodlivá požiadavka musí najprv prejsť cez webový server a PHP, až potom ju plugin uvidí. Chybu v PHP súbore, ktorý sa volá priamo, alebo útok, ktorý výrazne zaťaží samotné PHP, nemusí vždy zastaviť. Firewall na serveri (napríklad ModSecurity, Imunify360 alebo firewall vášho hostingového poskytovateľa) sa nachádza skôr v reťazci a zastaví viac, bez toho, aby výpočty zaťažovali váš plugin. Spýtajte sa svojho hostingového poskytovateľa, čo beží na serveri.
- Skener nájde problém až dodatočne. Malvérový skener vám povie, že niečo nie je v poriadku. To je cenné, no nič to nepredchádza. A skener na rovnakom serveri ako napadnutá stránka môže byť sám upravený útočníkom.
- Nenahrádzajú aktualizácie. Plugin so známou zraniteľnosťou zostáva zraniteľný, aj keď vedľa neho beží bezpečnostný plugin. Niektoré bezpečnostné služby ponúkajú „virtuálne záplaty“, ktoré zastavia známe útoky, kým neaktualizujete; užitočné ako preklenutie, nie ako náhrada.
- Sú samy osebe pluginom. Viac kódu, viac vecí na aktualizovanie, niekedy aj vlastná chyba. A dva bezpečnostné pluginy naraz si často odporujú.
- Stoja výpočtový výkon, najmä skenery, ktoré bežia na vlastnom serveri.
Rozumná voľba: najprv zistite, čo už robí váš hostingový poskytovateľ (firewall, kontrola malvéru, blokovanie pokusov o prihlásenie). Doplňte to, čo chýba, zvyčajne dvojfaktorové overenie a obmedzenie počtu pokusov o prihlásenie. Rozsiahly bezpečnostný plugin je najprospešnejší pri hostingu, ktorý sám robí len málo.
Zhrnutie
- Zabezpečenie (hardening) obmedzuje škodu z chyby alebo úniku; nenahrádza aktualizácie a heslá.
- Priečinky 755, súbory 644, wp-config.php prísnejšie; nikdy 777.
- Zapnite DISALLOW_FILE_EDIT, zablokujte PHP v uploads, vypnite zoznamy priečinkov a odstráňte zálohy, .git a debug.log z webového priečinka.
- Skrytie verzie je upratovanie, nie zabezpečenie; bezpečnostné hlavičky pomáhajú prehliadaču chrániť vašich návštevníkov.
- Firewall na serveri zastaví viac než plugin; bezpečnostné pluginy sú doplnok, nie náhrada.
Kvíz
Úloha
Úloha A7.4: Čo vaša stránka ukazuje všetkým? Zadajte adresu svojej stránky. Program načíta domovskú stránku a RSS kanál (/feed/) a overí: neobsahuje generator tag v HTML ani vo feede verziu WordPressu, nezobrazuje hlavička X-Powered-By verziu PHP a odosiela vaša stránka X-Content-Type-Options: nosniff, ochranu proti frame (X-Frame-Options alebo frame-ancestors) a Referrer-Policy? Ak chýba HSTS (lekcia 3.1) a Permissions-Policy, nevadí (oranžová).
Úloha A7.4b: Žiadne zvyšky vo webovom priečinku. Dokážte, že ide o vašu vlastnú stránku (TXT záznam alebo súbor s kódom úlohy). Program následne overí krátky pevný zoznam: priečinok /wp-content/uploads/ (žiadny zoznam priečinka), /.git/HEAD, /wp-content/debug.log a niekoľko bežných názvov kópií wp-config.php. V poriadku je, ak žiadny z nich nevráti obsah (404 alebo 403). Program neskúša nič iné a nič nemení.
Na ďalšie čítanie
Tieto články popisujú postup v paneloch WebOké; v iných paneloch to funguje podobne.
- Návod na DirectAdmin 11.5: Povolenia súborov a adresárov (chmod)
- Návod na DirectAdmin 11.4: Zobrazenie a úprava skrytých súborov ako .htaccess
- Návod na DirectAdmin 15.10: Firewall webových aplikácií (ModSecurity)
- Návod na DirectAdmin 15.11: Imunify360: skenovanie webovej stránky na výskyt malvéru
- Blokovanie súborov cez .htaccess, napríklad plugin-googlemap2-proxy.php
- Zabezpečenie PHP
- Zabezpečenie WordPressu (developer.wordpress.org, po anglicky): https://developer.wordpress.org/advanced-administration/security/hardening/
- Bezpečnostné hlavičky (MDN, po anglicky): https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#security
- Dodatočné zabezpečenie WordPressu: oprávnenia, wp-config a .htaccess
