Každý redakční systém, na kterém běží weby má systémové soubory, s pomocí kterých můžete detailně upravovat způsob jeho fungování. V případě CMS WordPress jsou to soubory ve složkách wp-admin nebo wp-includes. Na serveru Apache je ale k dispozici ještě jeden důležitý soubor, a tím je .htaccess.
Soubor .htaccess vám umožňuje nastavit pravidla, která řídí provoz vašich stránek. Může provádět kontroly provozu, které dělá dobrý firewall, a to pouhým přidáním několika řádků kódu do souboru. Nutno ale podotknout, že úpravy tohoto souboru jsou velmi citlivé na přesné zadání a pořadí znaků a proto jsou tyto úpravy doporučovány pouze zkušeným administrátorům serverů, kteří znají nejen výhody, ale i rizika.
A právě pro ně je určen i tento souhrn, protože opakování, případně připomenutí těchto pravidel je matkou moudrosti a nikomu jistě neuškodí. Takže s chutí do toho.
Proč myslet na zabezpečení webu?
- Ochrana dat – ať už máte blog vydělávající na reklamách, výdělečný e-shop nebo osobní prezentaci, je bezpečnost vašeho webu priritou. Není nic horšího, než únik uživatelských účtů nebo zobrazení obsahu pro dospělé místo vaší nabídky služeb.
- Důvěryhodnost značky – ať už podnikáte s firmou, nebo na vlastní pěst, důvěryhodnost vlastní značky můžete posílit kvalitně zabezpečeným webem, z jehož domény nebude např. rozesílán spam.
TIP: Ještě než se pustíte do samotných úprav, ujistěte se, že máte originální soubor .htaccess zálohovaný a dostupný pro případ nevyžádaných chyb.
Ochrana souboru wp-config.php
Soubor wp-config.php je jedním z nejdůležitějších systémových souborů ve vaší WordPress instalaci. Obsahuje základní informace o konfiguraci vašeho webu, včetně nastavení databáze, bezpečnostních klíčů a různých citlivých informací.
Z toho je celkem jasné, že neoprávněný přístup k takovému souboru může způsobit dost potíží. Naštěstí tomu můžeme zabránit s pomocí jednoduchého kódu v souboru .htaccess.
Pokud tedy potřebujete, vložte následující kód:
<files wp-config.php>
order allow,deny
deny from all
</files>
Blokování procházení adresářů
Zkušený útočník může jednoduše procházet jednotlivé adresáře na serveru, kde je váš WordPress web nainstalován a může zjištěné informace o souborech využít k následujícímu útoku.
Jako prevenci můžeme v souboru .htaccess toto procházení adresářů na serveru zakázat.
Options -Indexes
Blokace přístupu ke složce wp-content
Adresář wp-content je důležitou součástí WordPressu nejen z pohledu klasického uživatele, ale i jeho administrátorů. Uživatel prostřednictvím uživatelského rozhraní nahrává součásti obsahu webu, jako jsou obrázky, videa nebo dokumenty atd.
Administrátoři zde např. s pomocí FTP protokolu můžou nahrávat šablony, pluginy atd. S pomocí této složky jsou také zajištěny aktualizace pluginů a šablony.
Proto je vždy nutné, aby samotný WordPress měl k této složce plný přístup. To ale neplatí o útočnících, kteří by s pomocí PHP scriptů, které jsou v této složce obsaženy, mohli web napadnout, případně jej kompletně převzít a znehodnotit.
Nepřístupnost složky wp-content má své velké ale.. Pokud tuto složku znepřístupníte s pomocí .htaccess souboru, přestanou vám fungovat již zmíněné aktualizace (což ve specifických případech nemusí být problém).
Pokud jste si tohoto rizika plně vědomi, použijte následující kód:
# Blokování přístupu do specifické podsložky wp-content
<Directory "wp-content">
Order allow,deny
Deny from all
<Files ~ ".(jpg|jpeg|png|gif|css|js)$">
Order allow,deny
Allow from all
</Files>
</Directory>
Aplikujte na webu Security Headers
Bezpečnostní hlavičky jsou další účinnou vrstvou, jak váš web zabezpečit proti útokům. Ve stručnosti jsou to instrukce, které prohlížeči uživatele říkají, jak zaházet s požadavky na obsah a obsahem samotným.
Tato pravidla např. mohou omezit vkládání webu do iframe nebo zamezit načítání nežádoucích scriptů, jejich spouštění atd.
Tento způsob zabezpečení je vždy lepší zavádět hned při samotné tvorbě webu, než se pokoušet zajistit implementaci na dlouho rozjetém webu.
Pokud chcete na svém webu tato pravidla zavést, zadejte do svého .htaccess souboru tato pravidla:
# HTTP Strict Transport Security (HSTS)
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
# X-Content-Type-Options
Header set X-Content-Type-Options "nosniff"
# X-Frame-Options
Header set X-Frame-Options "SAMEORIGIN"
# X-XSS-Protection
Header set X-XSS-Protection "1; mode=block"
# Content Security Policy
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com; object-src 'none';"
U tohoto kroku je ale důležité zmínit, že je potřeba si překontrolovat, zda všechny scripty z pluginů a šablon používají vyžadované zabezpečovací hlavičky. Kdyby tomu tak nebylo, jejich (ne)načtení by mohlo způsobit mnoho komplikací.
Omezení spouštění PHP scriptů
Přesto, že je WordPress kompletně napsaný v PHP, je dobré ve specifických složkách zakázat jejich spouštění. Důvodů je hned několik, ten nejdůležitější je ale zabezpečení.
V případě, že by se stalo, že se útočník dostane do vašich systémových složek a bude zde chtít spustit script, tato pravidla v .htaccess mu to nedovolí.
Pokud tomu tedy odpovídají pravidla nastavení vašeho projektu, použijte tento kód:
<Files *.php>
deny from all
</Files>
Složky, u kterých tato pravidla můžete bezstarostně zavést jsou např. wp-content/uploads nebo wp-includes.
Vynucení SSL certifikátu
Pro zvýšení zabezpečení nejen webu ale i vašich klientů nebo čtenářů je důležité, aby prohlížeč bezpečně komunikoval se serverem, na kterém je umístěn váš web.
Aby tomu tak bylo a vaši klienti se nemuseli bát váš web navštěvovat, je nutné mít SSL (Secure Socket Layer) certifikát. Ten tuto bezpečnou komunikaci zajistí.
Pro jeho správnou aplikaci požádejte správce serveru/hosting, aby vám SSL certifikát vygenerovali a aplikovali na web.
Jeho vynucení si zajistíte s pomocí tohoto krátkého zápisu v souboru .htaccess:
# Vynucení SSL certifikátu
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Zákaz protokolu XML-PRC
Soubor xmlrpc.php ve WordPressu umožňuje komunikaci mezi vaším webem a aplikacemi třetích stran, jako jsou mobilní aplikace a externí služby. I když tato funkce může být užitečná, otevírá také potenciální cestu k útoku.
Pokud tedy víte, že z vašeho týmu nikdo nepoužívá mobilní aplikaci WordPress nebo žádnou další aplikaci pro psaní/publikaci příspěvků, zakažte protokol.
# Vypnutí protokolu skrze soubor xmlrpc.php
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
Blokování výpisu autorů
Skrze uživatelské účty a jejich oprávnění lze web napadnout hned několika způsoby. Pokud tedy útočník zná registrační jména/e-maily, může na web spustit útok tzv. hrubou silou, kdy se snaží uhodnou heslo daného uživatelského účtu.
Je tedy žádoucí, aby nebylo možné zjistit si s pomocí php funkcí jednotlivá jména/e-maily.
Toho lze snadno dosáhnout tím, že do souboru htacceess zapíšete následující kód:
# zákaz výpisu seznamu autorů
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/author/(.*)$
RewriteRule .* - [R=40 3,L]
Ochrana souboru .htaccess před neoprávněným přístupem
Jak sami vidíte, soubor .htaccess je velmi silným nástrojem pro zkušené správce webů. Proto je na místě myslet na samotnou ochranu tohoto souboru.
Pokud by se útočníci k souboru dostali a mohli jej následně upravovat, snadno by zrušili veškerá bezpečnostní pravidla a s webem si případně dělat, co se jim líbí (přesměrovat na scam, zobrazit nežádoucí reklamy atd.)
Chcete-li tedy chránit soubor .htaccess před neoprávněným přístupem, můžete do samotného souboru přidat konkrétní pravidlo. Toto pravidlo zabrání jakémukoli externímu přístupu a zajistí, že pouze vy (a váš server) můžete číst nebo upravovat jeho obsah.
Chcete-li to provést, přidejte následující kód:
# Ochrana souboru .htaccess
<Files .htaccess>
Order allow,deny
Deny from all
</Files>
Blokace škodlivých IP adres
Blokování podezřelých IP adres může zvýšit zabezpečení vašeho webu tím, že zabrání přístupu z nežádoucích míst. To může být užitečné zejména v případě, že si všimnete neobvyklých vzorců provozu, jako je vysoká míra požadavků z konkrétních adres IP v nestandardních časech nebo opakované pokusy o přístup na váš web z míst, které nejsou pro tým běžné.
Chcete-li to provést, můžete do souboru .htaccess přidat následující kód (a nezapomeňte písmeno x nahradit danou IP adresou):
# Blokace IP adresy
<Limit GET POST>
Order Allow,Deny
Allow from all
Deny from x.x.x.x
Pro úplnost ale dodám, že udržování jednotlivých ip adres v souboru není příliš efektivní a dlouhodobě udržitelný způsob ochrany webu, proto bych tuto funkci bral spíše jako dočasnou, než trvalou.
Často kladené otázky
Kolem tématu zabezpečení WordPress webů panuje mnoho doměnek, polopravd a mýtů. Na následujících otázkách/odpovědích zkusím vysvětlit ty nejdůležitější.
Závěrem pár slov
Soubor .htaccess je silný nástroj pro zajištění bezpečnosti vašeho webu. Je ale nutné dodat, že znalost úprav vyžaduje značnou přesnost a i jedno špatné písmeno nebo mezera může znamenat blokaci webu nebo jeho nedostupnost.
Proto je dobré mít po ruce nejen aktuální zálohu, ale také myslet na samostatné testování jednotlivých pravidel. Pokud se vám stane, že se web nenačte nebo jste si nechtěně zablokovali přístup do administrace, vraťte poslední změny .htaccess zpět a web otestujte znovu.
A to je pro tuto chvíli vše. Pokud se vám příspěvek líbil, budu rád, když napište komentář nebo budete příspěvek sdílet s přáteli. Můžeme se také spojit na sociální síti Facebook nebo LinkedIn.
Nastartuje web
pro svůj business
Se spolehlivým webařem, který si zakládá na
konzistentní a přímé komunikaci a dlouholetých
zkušenostech v oboru