Zabezpečení a ochrana aplikace WordPress

(Opensource / Redakční systém / WordPress)

WordPress patří mezi velmi populární platformu, blíží se k hranici 25% aktivních instalací ze všech CMS. Proto se také stal oblíbeným cílem hackerů. WordPress je známý svým přívětivým uživatelským rozhraním, ale pokud neprovedete bezpečnostní kroky, tak je i velmi zranitelný.

Dle oficiálních statistik bylo v roce 2012 napadeno přes 170 000 webů postavených na WordPressu. Toto číslo každým rokem roste. Většina hackerů nehodlá ukrást vaše data či odstranit důležité soubory, ale chtějí využít server pro odesílání SPAMů. Pokud jde tedy o zabezpečení webových stránek, vyplatí se být proaktivní.

Fakta a statistiky

  • 41% napadených stránek na WordPressu bylo skrze nezabezpečený hosting
  • 29% bylo způsobeno přes bezpečnostní mezeru v šabloně
  • 22% bylo hacknuto přes bezpečnostní mezeru v pluginech
  • 8% bylo napadeno hackery, protože prolomili slabé heslo


Jak je vidět, 41% útoků bylo zapříčiněno slabým zabezpečením na hostingu. Hackeři používají parametr URL a přidávají škodlivý kód do databáze, který jim umožňuje změnu hesla, načtení dat či jejich samotné odstranění.

Neskutečných 51% útoků bylo provedeno skrze šablonu nebo plugin. Hackeři vkládají eval base 64 kód, který umožní spustit PHP funkci z vašeho webu pro rozesílání SPAMu či přesměrování. Mohou také zanechat zadní vrátka, pro budoucí přístup na váš web.

Poslední na seznamu jsou slabá hesla. Hackeři získávají přístup pomocí automatizovaných skriptů, které vkládají neustále hesla, dokud nezískají přístup.

Věnujte následujícím řádkům obzvláště pozornost:

Důležitá nastavení 

WordPress používá předponu všech databázových tabulek. Výchozí prefix je wp_. Například wp_posts, wp_terms atd. Změnou prefixu tabulky můžete zabránit útoku. 

Prefix taublky naleznete v souboru wp-config.php: 

$table_prefix = 'wp_';

Jednoduše změňte předponu tabulek tak, aby jej žádný skript nemohl uhádnout. Například na:

$table_prefix = 'bdsm5eangbrtsm_';

Změna prefixu tabulky v souboru wp-config.php nezmění automaticky, pokud máte WordPress již nainstalovaný. Budete muset aktualizovat i databázi. jeden z nejrychlejších kroků je nainstalovat plugin iThemes Security. Plugin může tyto potřebné změny provést za vás. Můžete je také udělat ručně, jedná se však o náročnější způsob.   

Existují dva způsoby, které můžete provést skrze PHPMyAdmin. První metoda je užití SQL příkazu pro přejmenování každé tabulky. Zde je příklad: 

RENAME table `wp_links` TO `newprefix_links`;

Z výše uvedeného příkazu je zřejmé, že změníte prefix tabulky dle předpony definované v souboru wp-config.php. Je třeba spustit uvedený příkaz pro každou databázovou tabulku včetně všech základních tabulek a ostatních tabulek přidaných pluginy. 

Jiný způsob je kliknout na název tabulky a poté na kartu úpravy. V této kartě můžete měnit důležité nastavení tabulky, jako je např. její název. Tento krok je třeba dokončit pro každou tabulku. 

Dále je třeba aktualizovat odkazy na tabulky v usermeta a možnosti tabulek. To lze provést nejjednodušeji pomocí SQL příkazu. Chcete-li aktualizovat usermeta tabulku (dříve wp_usermeta), zadejte následující dotaz SQL:

UPDATE `newprefix_usermeta` SET `meta_key` = REPLACE( `meta_key`, 'wp_', 'bdsm5eangbrtsm_' )

Chcete-li aktualizovat možnosti nastavení (dříve wp_options), zadejte následující příkaz SQL: 

UPDATE `newprefix_options` SET `option_name` = 'bdsm5eangbrtsm_user_roles' WHERE `option_name` = 'bdsm5eangbrtsm_user_roles'

Aktualizujte pravidelně WordPress

Každá verze WordPressu řeší bezpečnostní díry, které byly zjištěny v předchozích verzích. Starší používané verze jsou tak náchylnější k útokům, proto je důležité vždy aktualizovat WordPress na aktuální verzi. Hlavní verze WordPressu obsahují mnoho nových funkcí a jsou uvolňovány dvakrát ročně. Poznáte je dle číslování, např. 3.7, 3.8, 3.9 či 4.0. Po každé hlavní verzi se uvolňují drobné aktualizace jako 3.9.1, 3.9.2  atd. Je nezbytně nutné použít tyto drobné aktualizace, protože řeší bezpečnostní chyby. 

Je možné zajistit automatickou aktualizaci hlavních a drobných verzí úpravou souboru wp-config.php

define( 'WP_AUTO_UPDATE_CORE', true );

Pokud používáte pluginy, které nejsou automaticky aktualizovány, a chcete předejít riziku, že nebudou kompatibilní s novou verzí WordPressu, lze automatické aktualizace zcela zakázat:

define( 'WP_AUTO_UPDATE_CORE', false );

Můžete také využít nástroj WP-CLI, který dokáže přes příkazový řádek plně spravovat WordPress od aktualizace, aktivaci pluginů, šablon až po zálohování a archivaci. 

Pluginy a šablony

Bezpečnostní díry v šablonách a pluginech představují více než polovinu hacků ve WP. Musíte si tedy dávat pozor, které pluginy aktivujete na svých webových stránkách.  

  • Pokud dokážete nahradit funkce některých pluginů vlastním kódem, vypněte je.
  • Dávejte si pozor na pluginy, které nebyly v posledních dvou letech aktualizovány.   
  • Buďte si vědomi toho, že špatně kódované pluginy mohou usnadnit přístup pro hackery. 

Je důležité, aby vaše šablona byla aktualizovaná a kvalitně nakódovaná. Kvalitu kódu šablony můžete zkontrolovat pomocí pluginu Theme-Check.  Nestahujte šablony z neznámých zdrojů, mohou obsahovat škodlivý kód. V případě pochybností se držte volných šablon které jsou k dispozici na www.wordpress.org. Hackeři mohou vložit škodlivý kód do prémiových pluginů a šablon a vy je pak můžete stáhnout rovnou v souborech. Jedním z takových případů je backdoor CryptoPHP, který se snaží umisťovat zpětné odkazy na napadené weby přes PHP kód v souboru social.png, jež se tváří zprvu jako klasický obrázkový soubor. Proto stahujte jen z oficiálních zdrojů.

Můžete svou stránku nakonfigurovat tak, aby se automaticky aktualizovali pluginy a šablony pomocí tohoto kódu v souboru wp-config.php

add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );

Editor pluginů a šablon v administraci WP umožňuje uživatelům upravovat své šablony a nainstalované zásuvné moduly. Pokud hacker získá přístup do administrace WordPressu, může během chvíle pozměnit důležité soubory a zapříčinit pád webu. Aby k tomu nedošlo, lze vypnout editor přidáním následujícího kódu do souboru wp-config.php:  

define( 'DISALLOW_FILE_EDIT', true );

Zranitelnost WordPressu, šablon a pluginů

Poměrně často se stává, že se objeví bezpečnostní chyba přímo ve WordPressu nebo pluginu či šabloně. Proto je důležité sledovat servery, které se zabývají právě zranitelností jako např. wpvulndb, který poskytuje databázi možných napadení skrze XSS, SQL či SSFR. Velmi zajímavou pomůckou je nástroj WPScan, který dokáže vypsat seznam všech pluginů a z externích databází vypsat k jednotlivým pluginům i možné zranitelnosti.  

Nastavení správných práv k souborům a složkám

Je důležité, abyste správně nakonfigurovali oprávnění k souborům. Nastavení adresáře s oprávněním 777 by mohlo umožnit nahrát soubor či úpravu existujícího souboru. 

Pro své WordPress stránky byste měli používat následující práva: 

  • Všechny adresáře práva na 755 nebo 750
  • Všechny soubory 644 nebo 640
  • wp-config.php na 600 

Vypnutí zasílání PHP zpráv o chybách

Pokud plugin nebo šablona způsobí chybu, chybová hláška může zobrazit cestu k souboru. Tato informace je důležitá pro hackery, proto je lepší tuto možnost zakázat. Stačí přidat následující řádky do souboru wp-config.php

@ini_set('display_errors','Off'); 
@ini_set('error_reporting',0);

Pokud uvedený kód nefunguje, kontaktujte technickou podporu svého hostingu. 

Ochrana pomocí souboru .htaccess

Soubor .htaccess je konfigurační soubor, který se používá např. k přesměrování URL a na konfigurování hezkých URl adres. Může být však i využit pro útok hackerů. 

Ujistěte se, že požadované příkazy budou vně WordPress značek # BEGIN WordPress a # END WordPress, které zajišťují např. změny URL. 

Soubor wp-config.php je důležitý soubor, neboť obsahuje nastavení připojení do databáze, tabulky prefixů, bezpečnostní klíče a další citlivé informace. Můžete chránit soubor přidáním následujícího kódu do vašeho souboru .htaccess:

order allow,deny deny from all 

Chcete-li omezit přístup do administrace WordPressu jen na konkrétní IP adresu, použijte níže uvedený kód (nezapomeňte změnit IP adresu). Vytvořte si samostatný soubor .htaccess a umístěte jej do adresáře /wp-admin/:  

order deny,allow 
allow from 195.168.5.1 
deny from all

Pokud zjistíte, že jsou neustále útoky na získání přístupu do administrace WP, můžete zablokovat jednotlivé IP adresy, viz řádek níže: 

order allow,deny 
deny from 457.123.8.9 
allow from all

Adresář /wp-includes/ obsahuje mnoho důležitých souborů, které jsou nutné ke spuštění WP. Chcete-li tento adresář chránit, přidejte do kořenového souboru .htaccess tento kód: 

 
RewriteEngine On 
RewriteBase / 
RewriteRule ^wp-admin/includes/ - [F,L] 
RewriteRule !^wp-includes/ - [S=3] 
RewriteRule ^wp-includes/[^/]+.php$ - [F,L] 
RewriteRule ^wp-includes/js/tinymce/langs/.+.php - [F,L] 
RewriteRule ^wp-includes/theme-compat/ - [F,L] 

Adesář obsahu /wp-content/ může být chráněn pomocí .htaccess také. Musí se vytvořit samostatný soubor .htaccess a nahrajte jej do složky /wp-content/ a vložte do něj následující kód: 

order deny,allow
deny from all
allow from all

Přihlašovací údaje

Slabá hesla jsou dalším možným způsobem, jak hackeři dostanou přístup na vaše stránky skrze brute force skripty. Proto je důležité vytvářet silná hesla pomocví různých nástrojů jako je např. Strong Password Generator či Password Generator. Pro ukládání hesel slouží programy jako OnePassword nebo KeePass

Aplikace WordPress umožňuje přístup do administračního rozhraní na veřejně známé adrese (vložením /wp-adminza název domény). Navíc ve velkém procentu případů je uživatelské jméno pro přihlášení "admin", tedy útočníkovi stačí pouze zadávat a zkoušet různé kombinace hesel pro získání přístupu do administrace. Další chybou u této aplikace je že nejste nijak limitován pokusy a můžete se o zadání hesla pokusit nesčetněkrát.

Z těchto hlavních důvodu se velice často využívají tzv. brute force útoky (útok hrubou silou, tedy pokusy o přihlášení do aplikace pod různými hesly) za účelem získáním přístupů do administrace WordPressu. V rámci administračního rozhraní navíc nejsou nijak používány cache a proto každé zobrazení stránky pro přihlášení a také následný pokus o přihlášení generuje velké množství dotazů na server a databázi. Proto je brute force útok (čítajíc i několik desítek pokusů během vteřiny) obrovskou zátěží pro server a celý server poté není schopen v záplavě těchto útoků obsluhovat další požadavky.

Proto je důležité změnit uživatelské jméno, což lze snadno pomocí SQL příkazu v PHPMyAdmin: 

UPDATE wp_users SET user_login = 'noveprihlasovacijmeno' WHERE user_login = 'admin';

Limit pokusů o přihlášení

Rozšíření které umožňuje opakové přístupy na stránky či přihlášení a ty poté blokovat na určitý čas. IP adresy přístupů lze také logovat a popřípadě o nich informovat emailem administrátora stránky. Velmi elegantní řešení nabízí plugin Login LockDown. Tento plugin umožní omezit počet pokusů o přihlášení z dané IP adresy. 

Skvělá věc je, že tento plugin zaznamenává každé neúspěšné přihlášení i IP adresu. Takže můžete blokovat přístupy pomocí .htaccess metodou zmíněnou výše. 

Skrytá přihlašovací stránka

Jak jsme zmínili, pro přihlášení do administrace používá WP stránku www.nazev-domeny.cz/wp-admin nebo www.nazev-domeny.cz/wp-login.php. Přemístění přihlašovací stránky tak velmi pomůže před brute force útoky. Existuje několik pluginů, které toto řešení poskytuji: 

  • Rename wp-login.php - umožňuje přejmenovat a změnit soubory jádra WP či přidat pravidla pro přepis. Adresář a stránky wp-login.php a wp-admin se stanou nedostupnými.
  • Lockdown WP admin -  Tento plugin bude skrývat stránku /wp-admin/, když uživatel nebude přihlášen. Umožňuje také změnu URL. 

Celou problematiku více dopodrobna popisuje nápověda na adrese zde.

Odstraňte číslo verze WordPressu

Ve výchozím nastavení WordPress umísťuje do zdrojového kódu  meta tag s používanou verzí WP. Bohužel tato informace je užitečná pro hackery a to zejména v případě, když používáte zastaralou verzi WordPressu. Pro skrytí verze lze umístit tento kód do souboru functions.php používané šablony:

remove_action('wp_head', 'wp_generator');

Alternativou je použití pluginu Remove Version

Prevence brute force útoku skrze dvojí přihlášení

Jako prevence je tedy potřeba zamezit přístupu na přihlašovací obrazovku útočníkovi. Něco takového lze skrze soubor .htaccess.

Do souboru .htaccess je třeba přidat následující:

V případě, že si potřebujete tento kód zkopírovat, tak můžete zde.

V rámci souboru .htpasswd vložte pouze uživatelské jméno a poté dvojtečku a heslo (upozorňuji že hesla musí být šifrována, lze použít například následující odkaz). Další uživatele vepisujte na další řádek.

uzivatel1:heslo1
uzivatel2:heslo2

Wordfence Security

Tento plugin je již jeden z rozsáhlejších. Dokáže sledovat online dění na stránkách a ty třídit do skupin (návštěvníci, registrovaní uživatelé,  roboti atd.). Manuálně blokovat administrátorem IP adresy a sledování jejich pokusů o přístup na webové stránky.  Popřípadě možnost i blokovat na základě určitého rozsahu IP adres a nebo informací o uživateli (použitý prohlížeč, operační systém nebo robota vyhledávače). Dále umožňuje aktivaci Firewall, skrytí verze WordPressu či vyžadování bezpečných hesel dle nastavení administrátora pro jednotlivé uživatele. Ke stažení zde

 



Zpětná vazba (feedback)

Byl tento článek nesrozumitelný, obsahoval nepřesné informace, nebo v něm nějaké informace chyběly?
Napište nám nebo využijte komentářů níže.

Komentáře

Nový komentář

(nebude zobrazen)
Tomáš Tuček napsal:

Ahoj, dlouho, dlouho až do nedávna jsem se vrtal ve phpRS. Vcelku po mě jedinečný systém, když si ho člověk upraví podle sebe. Rychlost jednoduchost a prostě. Ale přeci jen už je to tak trochu stařík a spousta webů mi na něm dožívá. O WP už také nějaký čas vím, ale nemohl jsem mu nějak přijít na chuť. Jak člověk stárne, tak jsou pro něj některé věci zajímavější než byly dříve. Takže jsem se do toho pustil, zase hromada učení, poznávání struktury a chápat jak to vše funguje. To co jsem tu letmo přečetl, je nad míru zajímavé, takže až si budu stavět další z xxx testovacích verzí, určitě postupně vše použiji.
Super moc dík za tenhle článeček a čas který byl potřebný k sepsání. Takových informací si moc vážím!
Tom

16. listopadu 2014 v 16:17
Kuba Vlášek napsal:

Jsem na tom úplně stejně, jako kolega Tuček, takže bych se jen opakoval. phpRS, .... Díky za užitečné informace.

20. ledna 2016 v 07:25