12 tipů pro lepší zabezpečení WordPress

Zabezpečení stránek vytvořených redakčním systémem WordPress je jednou z nejdůležitějších věcí, kterou by se měl každý tvůrce stránek zabývat jako první. My se nyní podíváme na ty nejdůležitější zabezpečení, na která byste neměli zapomenout.

Přehledy tipů zabezpečení:

1. Zálohovat, zálohovat, zálohovat!

A ještě jednou připomínáme – zálohujte! Doporučujeme zálohovat v pravidelných intervalech, nebo alespoň před nějakým větším zásahem do obsahu webu, šablony nebo před instalací pluginů. Informace o zálohování dat na webhostingu NoLimit najdete v tomto článku, na našem komunitním webu Help.wedos.cz najdete například návod na ruční zálohu FTP a také databáze. Může vám také pomoci návod na automatickou zálohu WordPress pomocí pluginu UpdraftPlus a ukládání dat na Wedos Disk.

2. Zabezpečte složku wp-admin

Ve složce wp-admin se nacházejí soubory, které se týkají správy vašeho webu. Jednou z možností, jak tento adresář zabezpečit, je povolit jen určité IP adresy pro přístup k adminu. Toto je vhodné například, pokud k administraci webu přistupujete z jednoho PC se statickou IP. Počet IP adres nemusí být omezen jen na jednu, můžete si nastavit i více IP adres například pro přístup z více míst (domov, kancelář atd.)

Na FTP v adresáři /www/domains/vašedoména/wp-admin přidáme soubor .htaccess a do něj vložíme tyto pravidla:

# Blokace wp-admin
Order Allow,Deny
Deny from all
# 1. povolená IP adresa 
Allow from XX.XX.XXX.XXX
# konec Blokace wp-admin

Kdy v řádku Allow from XX.XX.XXX.XXX nahradíme IP adresou, kterou chceme povolit pro přihlášení.

Doporučujeme ještě kvůli pluginům, které volají admin-ajax.php přidat tuto podmínku:

<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

Upozornění!!! Pokud používáte pluginy, které změní adresu přihlašovací stránky (ve výchozím nastavení je to /wp-admin), nemusejí tyto pravidla v .htaccess fungovat.

3. Zakažte zobrazovaní verze WordPress

Veřejná dostupnost těchto informací útočníkům usnadňuje zneužití známých zranitelností konkrétní verze WordPressu. Zobrazování verze WordPress zakážeme tak, že editujeme soubor header.php ve složce šablony, který používá vaše WordPress instalace, typicky je to /www/domains/vašedoména/wp-content/názevšablony a najděte tento řádek, který následně můžete smazat:

<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />

4. Udržujte svou instalaci WordPress aktuální

Je důležité udržovat instalaci WordPress aktuální. Vzhledem k tomu, že WordPress je projekt s otevřeným zdrojovým kódem, je snazší najít zranitelnosti. Chcete-li mít jistotu, že používáte bezpečnou verzi WordPressu, aktualizujte svou instalaci co nejdříve, jakmile se objeví stabilní verze.

Aktualizaci můžete provádět v administraci – vlevo nahoře Nástěnka/Aktualizace

5. Nepoužívejte výchozí jméno administrátora

Používat výchozího uživatele Admin nedoporučujeme, použitím tohoto přihlašovacího jména usnadňujete útočníkům, kteří již nemusejí hádat uživatelské jméno. Většina hackerů při pokusu prolomení hesla určitě vyzkouší uživatelské jméno jako admin, administrator a podobně. Z toho důvodu je dobré vytvářet unikátní uživatelská jména, které není možné předvídat.

Protože WordPress neumožňuje změnu uživatelského jména z administrace, musíte využít jiné způsoby:

  1. Vytvoření nového administračního účtu a smazání starého.
  2. Využití pluginu pro změnu uživatelského jména, například WPVN – Username Changer.
  3. Úpravy uživatele v databázi. Editujeme databázi přes PMA a vyhledáme řádek wx_users a editujeme sloupec user_nicename

6. Omezte počet neplatných pokusů přihlášení

Jedním z nečastějších používaných útoků je útok tzv. hrubou silou „Brute Force Attacks„, kdy se útočník snaží uhádnout vaše heslo (případně uživatelské jméno) obyčejným hádáním, tedy velkým počtem pokusů o přihlášení. Pokud nemáte omezení na počet neplatných pokus o přihlášení, útočník to bude zkoušet tak dlouho, až se mu to povede.

Omezení počtu přihlášení můžete nastavit přes různé pluginy, například Limit Login Attempts Reloaded, nebo bezpečnostní plugin Jetpack.

7. Používejte bezpečnostní pluginy

Po zajištění bezpečnosti lze využít také různé bezpečnostní pluginy.

Mezi kvalitní bezpečnostní pluginy patří například iThemes Security nebo Wordfence nebo již zmiňovaný Jetpack.

8. Změňte výchozí předponu tabulek – prefix

V základním nastavení je tento prefix nastavený na „wp_“, ale v průběhu instalace WordPressu si můžete tento prefix změnit na vlastní. Změnu prefixu provedete například během instalace (pokud instalujete pomocí vlastního balíčku).

Nejsnazší cesta je pak použití pluginu, doporučujeme například Brozzme DB Prefix

Pokud instalujete pomocí našeho instalátoru aplikací, jedna z cest pro tuto změnu je editací souboru wp-config.php.

Upozornění! Následující kroky mohou vést k poškození databáze, doporučujeme předem provést zálohu jak WordPress, tak databáze.

Přes FTP najdeme soubor wp-config.php, obvykle se nachází v adresáři /www/domains/vašedomena/wp-config.php a najdeme řádku s tímto textem:

$table_prefix  = 'wp_';

Místo wp_ nahradíme vlastním řetězcem (název prefixu může být jakýkoliv, například mujweb_, mojestranky_ atd.)

Dále je potřeba přejmenovat tabulky v databázi. Pokud používáte phpMyadmin (PMA) pro správu databáze, pak prefix tabulek změníte viz screenshot:

Informace o prefixu jsou také umístěny v tabulkách _options a _usermeta, ty je také potřeba změnit manuálně nebo pomocí SQL dotazu:

SELECT * FROM `mujweb_options` WHERE `option_name` LIKE '%wp_%';

a

SELECT * FROM `mujweb__usermeta` WHERE `meta_key` LIKE '%wp_%';

9. Správná přístupová práva pro soubory a složky

Z bezpečnostních důvodů doporučujeme používat práva souborům a složkám nastavit na hodnotu 640. Vyvarujte se použití práv nastavených na hodnotu 777, což znamená, že jej může číst, zapisovat a spouštět kdokoli. Práva souborů na FTP můžete změnit například přes webFTP, návod na editaci práv souborů a složek najdete v manuálu pro webFTP.

10. Zablokování přístupu k souboru wp-config.php z internetu

Soubor wp-config.php obsahuje množství citlivých údajů, které může útočník zneužít. Je tedy dobré tento soubor „schovat“ před ostatními návštěvníky internetu.

Provedeme to přidáním pravidel do soubor .htaccess a to následujících:

<files wp-config.php>
  Order deny,allow
  deny from all
</files>

11. Nastavte si dvoufázové ověřování

Nastavením dvoufázového ověřování uživatele zvýšíte velkou měrou zabezpečení vašeho WordPress webu. Díky tomuto ověřování se například dozvíte o neúspěšném pokusu o přihlášení nebo při prozrazení hesla k administraci .

Doporučujeme použít například tyto pluginy – WP 2FA, Two Factor Authentication nebo Wordfence Login Security

12. Změna URL přihlášení do administrace

Výchozí adresa pro přihlášení do administrace WordPressu je standardně ve tvaru https://mojedomena.tld/wp-admin/ nebo wp-login.php.

Doporučujeme tuto adresu změnit z důvodu bezpečnosti, kdy se roboti snaží útočit právě na výchozí přihlašovací stránku a tím, že ji změníte, těmto útokům můžete předejít.

Existují dva způsoby, jak přihlašovací URL změnit. Řekněme, že chceme změnit přihlašovací stránku na mojedomena.tld/prihlaseni.

  1. Použijte plugin, například Change wp-admin login, nebo WPS Hide Login
  2. Přidáním pravidel do souboru .htaccess. Zde musíte provést několik kroků:
  • Do souboru .htaccess přidáme tento kód:
# změna URL wp-admin
RewriteRule ^prihlaseni/(.*) wp-admin/$1?%{QUERY_STRING} [L]
RewriteRule ^prihlaseni$ wp-login.php
#konec změna URL wp-admin
  • Do souboru wp-config.php přidáme kód:
define('WP_ADMIN_DIR','prihlaseni');
define('ADMIN_COOKIE_PATH','/');
  • Do souboru functions.php, který najdete ve wp-content/themes/názevšablony/ přidáme tento kód:

if (strpos($_SERVER['REQUEST_URI'], 'wp-admin') !== false || strpos($_SERVER['REQUEST_URI'], 'wp-login') !== false || strpos($_SERVER['REQUEST_URI'], 'admin') !== false || strpos($_SERVER['REQUEST_URI'], 'login') !== false) {
  header("HTTP/1.1 301 Moved Permanently");
  header('Location: /'); die();    // přesměrujeme na web
  # wp_safe_redirect( '404.php' ); // nebo zobrazí chybovou stránku 404
}
add_filter('site_url', 'wpadmin_filter', 10, 3);

function wpadmin_filter( $url, $path, $orig_scheme ) {
  $old = array( "/(wp-admin)/");
  $admin_dir = WP_ADMIN_DIR;
  $new = array($admin_dir);
  return preg_replace( $old, $new, $url, 1);
}

add_action('login_form','redirect_wp_admin');
function redirect_wp_admin(){
  $redirect_to = $_SERVER['REQUEST_URI'];
  if(count($_REQUEST)> 0 && array_key_exists('redirect_to', $_REQUEST)) {
  $redirect_to = $_REQUEST['redirect_to'];
  }
}

add_filter('site_url', 'wplogin_filter', 10, 3);

function wplogin_filter( $url, $path, $orig_scheme ) {
  $old = array( "/(wp-login\.php)/");
  $new = array( "prihlaseni");
  return preg_replace( $old, $new, $url, 1);

V předposledním řádku $new = array( „prihlaseni“); nezapomeňte uvést správně název stránky, které jste uvedli ve wp-config.php (tedy když chci mít stránku přihlášení mojedomena.tld/prihlaseni, uvedu do tohoto řádku „prihlaseni„.