WordPress návody

Zabezpečení WordPressu pomocí .htaccess

security
Autor příspěvku Martin H.

WorPress je bezpochyby zdaleka nejpopulárnější redakční systém, což je jistě dobře, ale kvůli své oblíbenosti je také vystaven mnoha nebezpečím. Každý zná adresářovou a souborovou strukturu WordPressu, jeho slabá místa, pluginy, které se dají zneužít atd.

Jednou z neopomíjenějších metod zabezpečení jsou pravidlné aktualizace jádra WordPressu, pluginů a šablon. Aktualizace se často dokonce soustředí výhradně na vylepšení bezpečnosti, proto se snažte je neignorovat. Doporučujeme ještě odstranit soubory readme.htmllicense.txt, které zobrazují nainstalovanou verzi WordPressu (aby hacker tak snadno nezjistil, jakých bezpečnostních děr může využít).

Existují samozřejmě pluginy pomáhající s bezpečností jako je Login LockDown, jenž loguje a případně zablokuje IP adresy, z nichž probíhá velký počet pokusů o přihlášení. Jmenovat můžeme také iThemes Security nebo WordFence Security, něměli bychom však zapomínat na základní bezpečnostní prvky, které můžeme aplikovat bez použití externích nástrojů. Jedním z takových prvků je i soubor .htaccess, na který se nyní podrobněji podíváme ve spojitosti s bezpečností WordPressu.

Nastavení souboru .htaccess

Soubor .htaccess ve výchozím nastavení WordPressu nabízí pouze základní funkčnost podrstrkávání pěkných url adres. Jeho možnosti jsou však mnohem širší a představíme si několik cest, jak s jeho pomocí zabezpečit vaší instalaci WordPressu.

Obsah .htaccess vypadá přibližně takto:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Poznámka: před provedením změn v souboru .htaccess ho nezapomeňte zálohovat! Nesprávné změny v .htaccess mohou způsobit nefunkčnost celého webu.

Kódy, které si postupně uvedeme vkládejte za původní obsah, nepřepisujte ho.

Ochrana wp-config.php

O zabezpečení konfiguračního souboru jsme hovořili na konci článku “Nastavení WordPressu, která možná neznáte”. Pro připomenutí si uvedeme kód, který vložíte do .htaccess:

# zabezpečení wp-config.php
<Files wp-config.php>
order allow,deny
deny from all
</Files>

Tímto zamezíte komukoliv v přístupu k souboru wp-config.php.

Přístup do administrace pouze z vaší IP adresy

Pomocí .htaccess lze snadno omezit přístup do adresáře s administrací, musíte ale vytvořit nový .htaccess soubor ve složce wp-admin na vašem serveru. Do nového souboru v administrační složce vložte tento kód:

order deny,allow
allow from 111.111.111.111
deny from all

– nezapomeňte upravit IP adresu na tu svoji (jakou máte IP zjistíte například na www.whatismyip.com)

Tímto zamezíte přístupu do administrace komukoliv s jinou IP adresou než je ta vaše. Pozor ale na dynamické IP adresy – pokud se vaše adresa často mění, budete ji muset měnit i v .htaccess. Jestliže přistupujete do administrace z více míst, musíte přidat nový řádek s IP adresou jiného počítače.

Zabanování vybraných návštěvníků

Pokud zjistíte, že z nějaké IP adresy dochází k nadměrnému počtu pokusů o přihlášení nebo jen extrémnímu množství jiných http požadavků (např. pokusy o přidání komentáře), můžete takového uživatele snadno zabanovat pomocí následujícího kódu v .htaccess:

<Limit GET POST>
order allow,deny
deny from 111.111.111.111
allow from all
</Limit>

Další zabanované adresy snadno vložíte pomocí nové řádky “deny”, např.

<Limit GET POST>
order allow,deny
deny from 111.111.111.111
deny from 222.222.222.222
allow from all
</Limit>

Zákaz prohlížení adresářů

S popularitou WordPressu roste i obeznámenost s tímto systémem, a to může být někdy na škodu. Pokud hacker zná adresářovou strukturu webu a může ji procházet, je pro něj jednodušší prolomit zabezpečení. Proto je lepší procházení adresářů zakázat přidáním:

Options All -Indexes

Zákaz vstupu do wp-content

Adresář wp-content obsahuje obrázky, šablony, pluginy a celkově hraje velmi důležitou roli pro funkci WordPressu, proto by se k němu běžný návštěvník neměl dostat. Opět stačí vytvořit nový .htaccess soubor přímo v daném adresáři (wp-content). Uživatelům povolíme načítání pouze těch souborů, které nenaruší bezpečnost. Tímto krokem ochráníme důležité .php soubory.

Order deny,allow
Deny from all
<Files ~ ".(xml|css|jpe?g|png|gif|js)$">
Allow from all
</Files>

Ochrana jednotlivých souborů

Přes .htaccess je možné chránit i jednotlivé soubory, například .htaccess samotný. Opět použijeme oblíbenou formulaci “order allow,deny”:

<files .htaccess="">
order allow,deny
deny from all
</files>

Název souboru můžete samozřejmě nahradit jakýmkoliv jiným.

Zabezpečení .htaccess

Na webu se často nachází několik .htaccess souborů a nejlepším řešením je chránit všechny zároveň pomocí jednoho příkazu. Pomůžeme si regulárním výrazem:

<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>

Tento kód zabrání komukoliv prohlížet všechny soubory, které začínají na “hta”.

Závěrem

Podívali jsme se na to, jak lze zvýšit zabezpečení celého webu pomocí několika příkazů přidaných do souboru .htaccess. Seznam způsobů ochrany není vyčerpávající, jistě najdete mnoho dalších možností, jak zvýšit zabezpečení nebo jen vylepšit fungování webu. Rádi o nich uslyšmíme v komentářích a případně do článku doplníme.

O autorovi

Martin H.

Hobby programátor, IT nadšenec a nepoučitelný kritik.

7 komentářů

  • “Přístup do administrace pouze z vaší IP adresy” – napr. ja mením adresy aj pár krát denne a nie som ochotný všetky dopisovať do htaccess aby náhodou niekedy v budúcnosti dostal rovnakú adresu.
    “Zabanování vybraných návštěvníků” – už vidím ako si niekto prezerá logy na neoprávnené prístupy.. ak vôbec vie čo to je a ako sa k nim dostať.

    Lepšie ako písať takýto článok by bolo popisať spominaný iThemes Security. Tam stačí prejsť sprievodcom a ten rieši prakticky všetky bezpečnostné nedostatky. napríklad aj pokusy o neoprávnené prihlásenia.. sám IP adresu zablokuje.

    • Jistě, pro někoho je problém limitovat IP adresy s přístupem do administrace. Ale některé weby jsou pod slušnou palbou útoků, tak se adminovi vyplatí i lognout na to FTP a vždy před přihlášením si tu adresu změnit (není nutné je tam vyloženě všechny dopisovat).

      Co se týče těch logů, pak samozřejmě je lepší využít služeb specializovaného pluginu, ale pokud jde jen o nějakou “známou firmu” a víte, jakou má ip adresu (protože na ni upozorňují leckde po internetu), pak je dobré alespoň vědět, že něco takového lze udělat během pár vteřin.

      Jinak díky za tip na článek, určitě se nad tím zamyslím.

    • Zdravim, ja som som vytvoril priecinok, ktory ma lubovolny nazov v korenovom adresari, aby ho poznal iba uzivatel a tam je index.php s kodom, ktory v /wp-admin/.htaccess dovoli iba IP z ktorej sa pristupilo na ten adresar. Neriesi to viacerych uzivatelov ale mne to staci.

      $ref = $_SERVER["REMOTE_ADDR"];
      $showtime ="
      order deny,allow
      deny from all
      allow from $ref
      ";

      $filelog = "../wp-admin/.htaccess";
      $fp=FOpen($filelog,"w");
      @$fwok = @FPutS($fp,$showtime);
      @$fw = @FClose($filelog);

      if($fwok) {
      header("location:../wp-admin");
      };

  • Osobně na joomle používám ještě doplnění do htaccess login dvojitý na administrator. Člověk musí zadat prvně jméno a heslo, aby ho pustil htaccess a poté do administrace. Je to taky možnost, jak zamezit zbytečným útokům.

  • zabezpecenie mam nastavene pomocou ithemes security. podla tohto clanku som si prechadzal .htaccess a porovnaval ci tam mam tie veci z clanku zapisane. nasiel som par nezrovnalosti

    1) zakaz prohlizeni adresaru: doplnit “options all -indexes” — ja mam v htaccess len “options – indexes”. Mam v svojom .htaccess doplnit to all, alebo pridat dalsi riadok?

    2) zakaz vstupu do wp-content: ak ten zapis pridam do .htaccess tak nezakazem pristup do wp-content aj sebe? nemal by som pod “deny from all” doplnit svoje ip prostrednictvom allow from ….?

    3) ak nieco doplnam ako napr:

    order allow,deny
    deny from all
    satisfy all

    zapisem to na koniec az za end wordpress??

    za reakciu vopred dakujem.

  • Ak das do wp-content do .htaccess toto :
    Order deny,allow
    Deny from all

    Allow from all

    zablokujes si obsah z galerii aj pre navstevnika stranky

Zanechat komentář

Získejte více informací o WordPress!

Připojte se do našeho emailového seznamu a nenechte si ujít informace, novinky a návody ze světa WordPressu.

Úspěšně jste se zapsali do našeho newsletteru. Děkujeme!

Tomáš Cirkl

Tomáš Cirkl

WordPress specialista

Blog WPlama.cz píši už více než 5 let. O WordPress přednáším a pořádám školení. Pro své klienty vytvářím a spravuji webové stránky.