V roce 2021 WordPress má okolo 40 % podílu softwaru, který pohání webové stránky. Co se týká čísel pouze v CMS odvětví, jedná se o 64 %. Další je pak Joomla s 4,6 %. Je tedy jasné, že co se bezpečnosti týká, musí WordPress a jeho komunita zůstat aktivní a pravidelně opravovat chyby.
V tomto článku se místo běžné teorie zaměříme na konkrétní kroky, pluginy, služby a kódy.
Jak zamezit základnímu přístupu
Už jste slyšeli asi 100x. Používat silná hesla a přihlašovací jména. To je základ. Ale jak na to? Zaprvé nikdy nevymýšlejte hesla. Nechte si je generovat programem typu LastPass nebo 1Password. Uchovávají hesla a generují vám je.
Pak už jen stačí zvolit jméno jiné než „admin“ a prakticky tuto oblast máte vyřešenou. Pokud nevíte jaké jména volit, doporučuji něco typu „nazevwebu_jmeno“. Příkladem by tedy mohlo být „domenacz_pavel“ apod.
Určitě se bude hodit pak rozšíření hashování hesel pomocí pluginu WP Password Bcrypt. Jedná se o lepší verzi toho, co používá WordPress.
Poznámka: hashování je uchování hesel ve formě nečitelné oproti původní zadané hodnotě. Kupříkladu heslo „ahoj“ by mohlo v databázi vypadat jako „79c2b46ce2594ecbcb5b73e928345492“.
Útoky z venku
Pokud vše provede správně – aktualizovaný WordPress i pluginy, silná hesla apod – tak útočníkům nezbývá než Váš web odstavit. Velmi často lze najmout „zombies“ z Ruska / Číny, kde se následně děje útok směrem na Váš web. Jak? Prostě a jednoduše velmi mnoho zařízení (alias uživatelů) začnou načítat ideálně stránku na Vašem webu, která je nejvíce náročná na výpočetní výkon hostingu.
Pokud se zdaří, nespadne nejen Váš web ale i další. Tím je zaručeno, že obnova bude složitější než jen nahození jednoho webu.
Cloudflare a další
Od toho existují řešení typu cloudflare, kdy svůj web schováte za službu, která je proti těmto typům útoků stavěná. Má to celou řadu výhod ale i nevýhod. Nicméně pokud máte zákeřnou konkurenci – což jsme u několika klientů zažili – a hosting / správce serveru, kde máte svůj web, nezvládá řešit útoky, nezbývá nic jiného.
Útoky zevnitř
Už bylo zmíněno, že je potřeba mít aktualizovaný WordPress i pluginy. Proč? Protože nikdo není neomylný a tvůrci šablon / pluginů i WordPressu mohou někde nechat kód, který otevře vrátka pro nahrání scriptu na web. Kdy pak útočník už může dělat prakticky cokoliv.
To se týká i počtu pluginů a především těch, od menších vývojářů. Tam mnohdy není úplně touha řešit edge-case problémy. Typicky čtení z databáze, kde může být kód nebo soubor v pluginu, který lze spustit načtením jeho adresy v prohlížeči.
Taky je dobré používat nejnovější PHP, což je aktuálně PHP 7.4 nebo PHP 8 – ale jen v případě, že to nebude mít dopad na Váš web.
Pluginy
Pokud potřebujete bezpečností plugin – není totiž vždy potřeba – doporučení je kouknout na WordFence, All one One WP Security nebo iTheme security. S oběma lze chránit web relativně dostatečně dobře. Samozřejmě pokud nemáte dobrý hosting / dobrého poskytovatele serveru, tak pluginy nic nezmohou.
- WPS Hide Login = skryje základní URL pro přihlášení
- WP Password Bcrypt = lepší hashování hesel
- Login Protection = jednoduchý plugin na omezení počtu přihlášení (bezpečností pluginy výše umí v základu)
Hosting / Server
Obecně není skoro možné říci, jaký hosting je na co stavěn. Co se týká našeho prostředí, doporučujeme Webtero.cz jako multi hosting řešení. Serverů je tu celá řada a je velká otázka, co přesně potřebujete.
HTTPS a http/2
Šifrování při přenosu dat, lepší načítání webu a ještě k tomu Vám Google bude dávat lepší hodnocení. Navíc lze použít Let’s Encrypt certifikát, který už snad každý rozumný hosting dává v základu a je zdarma. K tomu všemu pak zvyšuje certifikát důvěru u zákazníků. Není tedy důvod – skoro – proč jej nepoužívat.
Bezpečnostní hlavičky
Pro lepší bezpečnost je super vložit následující hlavičky. První kód je pro .htaccess soubor na serveru. Druhý je pak pro funkci v PHP (lze vložit například do functions.php).
Header add X-XSS-Protection "1; mode=block"
Header add X-Content-Type-Options "nosniff"
Header add Strict-Transport-Security "max-age=31536000"
Header add X-Frame-Options "SAMEORIGIN"
function sikmo_wp_headers( $headers ) {
$headers['X-XSS-Protection'] = '1; mode=block';
$headers['X-Content-Type-Options'] = 'nosniff';
$headers['Strict-Transport-Security'] = 'max-age=31536000';
$headers['X-Frame-Options'] = 'SAMEORIGIN';
return $headers;
} add_action( ‚wp_headers‘, ‚sikmo_wp_headers‘ );
Zálohování webu
Záloha je důležitá část provozování čehokoliv důležitého. Ideální je mít tuto část vyřešenou na serveru. Protože cokoliv co se stane s webem / aplikací, tak se můžete spolehnout na provozovatele. A v případě, že řešíte nárazové problémy, tak je dobré mít navíc k tomu zálohu vlastní dle potřeby.
Konkrétní kódy
Zde pak budeme přidávat kódy, které je dobré použít nebo se zamyslet, zda byste je neměli vložit k sobě do webu.
define('DISALLOW_FILE_EDIT', true); // zabrání editace šablony z administrace, stačí vložit do wp-confing.php