18 Wordpress bezpečnostních tipů
12. 4. 2020Článek reprezentuje základní bezpečnostní tipy a rady. Zabezpečení Wordpressu je v závislostech na použitých rozšířeních komplexní věc a tak nelze říci, že níže popsané rady zajistí opravdu bezpečný provoz jakékoliv instance systému Wordpressu.
1. Včasné aktualizace systému
Pravidelně kontrolujte dostupnost nové verze systému a provádějte aktualizace včetně pluginů, šablon a jejich rozšíření.
2. Skryjte výchozí stránku pro přihlášení
Wordpress ve výchozí instalaci používá obecně známé URL adresy pro přihlášení do administrace. Tyto adresy jsou častým start-pointem pro slovníkový útok. Skryjte výchozí adresy a nahraďte je za vlastní.
Nahrazení vám umožní například plugin WPS Hide Login https://wordpress.org/plugins/wps-hide-login/.
3. Používejte silné hesla
Častým nedostatkem v bezpečnosti je používání nedostatečně silných přihlašovacích hesel a nebo přístupových tokenů k API službám. Naleznete mnoho tutoriálů jak poskládat silné heslo. Obecně doporučuji používat minimálně osmimístnou délku hesla v kombinaci písmen, číslic, speciálních znaků a různých velikostí písma.
Je vhodné zvolit uživatelské jméno, které nebude “admin” nebo “administrátor”.
4. Wordpress Security Keys
Pro bezpečnější ukládání důležitých informací jako například je relace přihlášených uživatelů jsou pro šifrovací algoritmus použité bezpečnostní klíče. Klíče se nalézají v konfiguračním souboru “wp-config.php” pod konstanty AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY, AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT, NONCE_SALT. Vytvořte silné klíče a občas proveďte jejich záměnu za nové, systém automaticky rozpozná změnu.
Pro automatické generování klíču můžete použít Wordpress API:
https://api.wordpress.org/secret-key/1.1/salt/
5. Přístup k databázi
Pro přístup ke zdroji dat zvolte silné heslo včetně uživatelského jména. Jako login nepoužívejte název databáze nebo název webové stránky.
6. Prefix názvů tabulek
Znalost názvů tabulek značně zjednoduší pokusy o XSS nebo SQL injection útoky. Vyhněte se původnímu prefixu tabulek “wp_” a zvolte vlastní prefix. Zvolený prefix by se neměl dát jednoduše odhadnout a tedy neměl by obsahovat například název domény nebo stránek.
7. Používejte SSL (Secure Socket Layer)
Nastavte na svém hostingu používání protokolu HTTPS s důvěryhodným certifikátem a přistupujte ke stránce a do administračního rozhraní přes šifrovanou komunikaci.
8. Zakažte editaci souborů
Wordpress umožňuje z administrační části editovat některé své soubory a nebo soubory šablon. Při získání přístupu do administrace a nebo podsunutím z bezpečnostní díry lze provádět úpravy některých zdrojových souborů a tím získat přístup k datům. Tato zranitelnost může také způsobit, že útočník odstraní uzamknuté zálohy systému a nebo vloží škodlivý fragment pomocí kterého získá možnost spouštění scriptů na straně serveru.
Vypnutí možnosti editace souborů provedete v souboru wp-config.php přidáním následující konstanty:
define('DISALLOW_FILE_EDIT', true);
9. Skryjte verzi systému
Wordpress přidá ve výchozím nastavení číslo své verze do šablony. Informaci o přesné verzi systému lze využít k dohledávání chyb v buildu a následně je využít k vniknutí.
Odebrání čísla verze systému provedete přidáním následujícího nastavení do souboru function.php samotné šablony:
remove_action( 'wp_head', 'wp_generator' );
10. Zakažte WP REST API
Wordpress umožňuje správu obsahu pomocí REST API rozhraní. Pokud toto rozhraní nepotřebujete používat, tak je vhodné ho zakázat a snížit tím počet možných bodů k potencionálnímu útoku.
Zablokování provedete přidáním následující konstanty do souboru function.php samotné šablony:
// Disable REST API link tag
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
// Disable oEmbed Discovery Links
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );
// Disable REST API link in HTTP headers
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
11. Nastavte pravidla CSP (Content Security Policy)
Určete striktní politiku načítaných assetů a to buď některým z dostupných pluginů jako je https://wordpress.org/plugins/http-security/ a nebo přidáním samotný hlaviček do zdrojového kódu šablony. Pro získání více informací a možností nastavení CSP doporučuji navštívit stránku https://securityheaders.cz/clanky/security-headers-wordpress.
12. Zálohování
V pravidelném intervalu (ideálně automatickým nástrojem) provádějte zálohování databáze, nastavení systému, nahrané soubory a samotný systém. Vytvořené zálohy ukládejte na zabezpečený prostor mimo samotný systém a soubory ošetřete oprávněním proti zápisu či odstranění.
Určete a vyzkoušejte strategii obnovy data ze zálohy v případě problému. Záloha by měla být dobře dostupná pro rychlé obnovení bez nutnosti složitých procesů a zároveň bezpečná.
13. Nástroje zabezpečení
Rozšiřte systém o některý nástroj pro správu zabezpečení. Nástroj by měl minimálně poskytovat následující funkce a vlastnosti:
- Brute Force Protection
- SSL (řízení přesměrování na protokol HTTPS)
- E-mail notifikace stavu systému a bezpečnostních auditů
- Pravidelné aktualizace a tedy aktivní vývojáře
- Kontrolu aktivity uživatelů
- Automatické auditování stavu systému
- Kontrolu konzistence systému a oprávnění souborů
Často můžete narazit na následující nástroje a však výběr je přímo na Vás:
- Wordfence Security – Firewall & Malware Scan: https://cs.wordpress.org/plugins/wordfence/
- All In One WP Security & Firewall: https://cs.wordpress.org/plugins/all-in-one-wp-security-and-firewall/
- iThemes Security (formerly Better WP Security): https://cs.wordpress.org/plugins/better-wp-security/
14. DDoS ochrana
Dnes již celkem běžný typ útoku spočívající v zahlcení serveru požadavky a ten následně přestane reagovat na odbavování přicházejících požadavků - tím se stane stránka nedostupná a v případě e-commerce řešení přicházíte o zisky.
Proti DDoS se lze bránit nasazením firewallu filtrující požadavky na server poskytující webovou prezentaci. Tuto službu poskytuje několik společností jako je například Cloudflare, který poskytuje pro jednu doménu ochranu zdarma.
15. Zakažte procházení souborů
Zakažte traverzování adresářů v souboru .htaccess:
Options -Indexes
Zakažte procházení celé struktury:
Order allow,deny
Deny from all
16. Zabezpečte soubor wp-config.php
Soubor wp-config.php obsahuje kompletní konfiguraci systému a jedná se o jeden z nejdůležitějších souborů. Ochraňte tento soubor vložením následujícího pravidla do souboru .htaccess:
<Files wp-config.php>
order allow,deny
deny from all
</Files>
17. Oprávnění adresářů a souborů
Ošetřete adresáře a soubory před zápisem či jejich změnou. Nastavte oprávnění adresářů na 755 a oprávnění souborů na 644. Nezapomeňte však, že pro adresáře log, plugin a případně i cache musíte použít oprávnění 777 pro možnost zápisu. Soubor “wp-config.php, .htaccess” doporučuji po konfiguraci ošetřit oprávněním “444” - nezapomeňte, že pak nemusí fungovat některé automatické úpravy z administrace.
18. Změňte název adresáře “wp-content”
Změňte výchozí název adresáře “wp-content” a zaregistrujte nový název v souboru “wp-config.php” následujícím nastavením konstant:
define( 'WP_CONTENT_FOLDERNAME', 'data' );
define( 'WP_CONTENT_DIR', ABSPATH . WP_CONTENT_FOLDERNAME );
define( 'WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/' );
define( 'WP_CONTENT_URL', WP_SITEURL . WP_CONTENT_FOLDERNAME );
Přečte si základní tipy a rady jak zlepšit bezpečnost samotného PHP: https://www.lukashron.cz/php-bezpecnostni-tipy.html
Máte další rady a tipy k zabezpečení WP? Napište je do komentáře.