V tomto príspevku vám ukážem, ako si svojpomocne zabezpečiť svoj WordPress. Vďaka tomu, že WordPress je najrozšírenejší CMS systém na svete, je pre hackerov, ktorí sa ho snažia napadnúť, veľmi príťažlivý. Tento fakt mu nerobí príliš dobrú povesť, napriek tomu, že vo väčšine prípadov nie je problém na strane samotného WordPressu. Tak poďme teda ukázať, v čom môže byť problém.
Prehlaď bodov, ako zlepšiť bezpečnosť WordPress:
- Vybrať si dobrý hosting a dôverovať mu
- Aktualizovať WordPress, pluginy a témy
- Prihlasovacie údaje
- (re)Captcha alebo dvojfaktorová autentifikácia
- Zmena prihlasovacej adresy
- Vypnutie editora pluginov a tém
- Ochrana pomocou súboru .htaccess
- Vypnutie zasielania PHP správ o chybách
- Skrytie čísla verzie WordPressu
- Skontrolovať nastavenie práv k súborom a zložkám
- Zmeniť prefix wp_ v databáze
- SSL certifikát – https://
- Záver
Vybrať si dobrý hosting a dôverovať mu
Web nebude nikdy bezpečný, pokiaľ bude uložený na nezabezpečenom hostingu. Väčšie pozitívne skúsenosti mám len s hostingovou spoločnosťou Webglobe – Yegon, aj keď pár výhrad by som mal. Podpora je milá a hlavne chápavá. V ponuke majú špeciálny optimalizovaný hosting pre WordPress a jeho inštaláciu dokážete urobiť jednoducho cez ich administračné rozhranie, bez nutnosti vedieť niečo o FTP, databázach a pod. Podpora Let’s Encrypt a jeho automatické predlžovanie.
Aktualizovať WordPress, pluginy a témy
Úplná samozrejmosť je udržiavať Wordpres, pluginy a témy aktuálne. Aktualizácie vychádzajú viac krát do roka, pričom hlavné verzie WordPressu sú uvoľňované tri krát ročne. Obsahujú hlavne nové funkcie a spoznáme ich podľa dvojmiestneho označenia napríklad 4.0, 4.5, 4.6, 4.7. Tieto hlavné verzie často obsahujú viacero bezpečnostných chýb. Po vydaní každej hlavnej verzie sa preto vydávajú menšie aktualizácie, ktoré nesú trojmiestne označenie 4.7.1, 4.7.2 atď.. Tieto menšie aktualizácie je nutné vykonávať, pretože riešia bezpečnostné chyby. V changelogu si môžete v prehľadnej forme pozrieť aké verzie kedy vyšli, aké funkcionality a chyby boli pridané alebo opravené. Zraniteľnosti WordPressu a pluginov je možné sledovať na webe https://wpvulndb.com/.
Pre zapnutie automatických aktualizácii WordPressu je potrebné vložiť do súboru wp-config.php nasledujúci riadok:
define( 'WP_AUTO_UPDATE_CORE', true );
WP_AUTO_UPDATE_CORE môže byť definovaná jednou z troch hodnôt,
- true – všetky aktualizácie sú povolené
- false – aktualizácie sú zakázané
- minor – menšie aktualizácie sú povolené, hlavné aktualizácie sú zakázané
Predvolenou hodnotou WP_AUTO_UPDATE_CORE je minor
Čo sa týka pluginov a tém, snažím sa využívať tie, ktoré boli aktualizované v priebehu posledného roka. Stránka wordpress.org/plugins, upozorňuje na pluginy, ktoré neboli aktualizované viac ako 2 roky. Automatické aktualizácie pluginov a tém sa dajú zapnúť pridaním nasledujúcich riadkov do súboru functions.php v aktívnej téme. Tu treba upozorniť na to, že treba používať child theme.
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
Je však na zváženie, či budete používať automatické aktualizácie, pretože nie vždy to musí dopadnúť, tak ako má. Ja aktualizujem zásadne až po zálohovaní databázy a súborov. Prípadne mám len WP_AUTO_UPDATE_CORE nastavený na minor.
Poznámka: rozhodne neodporúčam sťahovať pluginy a témy z warezu. Môžu a často aj majú pridané škodlivé kódy.
Prihlasovacie údaje
Zásadná vec je, nepoužívať prihlasovacie meno admin a používať silné heslá – na správu hesiel používam šikovnú utilitku „KeePass Password Safe“. Pre zvýšenie bezpečnosti je dobré zmeniť aj ID všetkých užívateľov, ktorí majú administrátorské práva. To sa robí zmenou hodnôt v databáze, napríklad cez phpMyAdmin. Nezabudnite si najprv databázu zálohovať. Pre lepšiu bezpečnosť je vhodné voliť vyššie čísla. Zmenu vykonáme pomocou nasledovných SQL príkazov (mení ID administrátora z 1 na 1595):
UPDATE wp_users SET ID = 1595 WHERE ID = 1;
UPDATE wp_usermeta SET user_id = 1595 WHERE user_id = 1;
Prihlasovacie meno je možné zmeniť pomocou nasledovného príkazu:
UPDATE wp_users SET user_login = 'noveprihlasovacieeno' WHERE user_login = 'admin';
(re)Captcha alebo dvojfaktorová autentifikácia
S prihlasovacími údajmi priamo súvisí prihlasovací formulár, ktorý môžeme chrániť pred botmi napríklad reCaptcha overením, alebo dvojfaktorovou autentifikáciou, obe možnosti sú od Google. Konkrétne používam plugin Google Captcha (reCAPTCHA) by BestWebSoft, ktorý vie pridať overenie do prihlasovacieho a registračného formulára, prípadne do komentárov.
Ešte lepšiu ochranu nám ponúka dvojfaktorové overovanie, ktoré je možné nasadiť na web pomocou pluginu Google Authenticator. Prihlasovanie prebieha zadaním mena a hesla plus autentifikačného kódu, ktorý nám vygenerovala mobilná aplikácia (Android alebo iOS).
Zmena prihlasovacej adresy
Účinným spôsobom, ako sa brániť Brute-force útokom, je zmena url adresy prihlasovacieho formulára (www.treska.eu/wp-admin/ a www.treska.eu/wp-login.php), napriklad na www.treska.eu/?prihlasenie. Na túto zmenu je možné použiť plugin WPS Hide Login. Hosting od Webglobe – Yegon má ochranu pred brute-force útokmi na prihlasovací formulár, preto túto metódu nepoužívam na u nich hosťovaných weboch.
Vypnutie editora pluginov a tém
Tento, na prvý pohlaď užitočný nástroj, umožňuje administrátorom webu editovať kódy pluginov a tém priamo z administrácie (dashboardu) WordPressu. Nevhodný zásah do kódu môže spôsobiť pád celého webu a znemožniť tak opätovné prihlásenie kvôli náprave. Jedinou možnosťou pre opravu potom ostáva použiť FTP.
Rovnako ako administrátor, môže kódy pluginov a tém upraviť hacker, čo určite nechceme. Jedinou ochranou je, vypnutie tohto editora, čim znemožníme prístup ku zdrojovým kódom, bez prístupu k FTP.
Editor vypneme vložením nasledujúceho kódu do súboru wp-config.php
define( 'DISALLOW_FILE_EDIT', true );
Ochrana pomocou súboru .htaccess
Ďalšou účinnou ochranou pred útočníkmi je obmedzenie prístupu do administrácie WordPressu na konkrétnu IP pridaním súboru .htaccess do zložky /wp-admin/ s nasledujúcim kódom:
order deny,allow allow from 123.123.123.123 deny from all
a do súboru .htaccess v hlavnom adresári pridaním:
<FilesMatch wp-login.php> Order Allow,Deny Allow from 123.123.123.123 </FilesMatch>
V oboch prípadoch nahradíme 123.123.123.123 vašou IP.
Vypnutie zasielania PHP správ o chybách
Ak sa v kóde pluginu alebo šablóne vyskytne chyba, chybová hláška môže zobraziť úplnú serverovú cestu k danému súboru. Táto informácia je veľmi citlivá a pre hackerov dôležitá. Preto je lepšie tieto reporty zakázať, pridaním nasledujúcich riadkov do súboru wp-config.php.
@ini_set('display_errors','Off'); @ini_set('error_reporting',0);
Skrytie čísla verzie WordPressu
WordPress štandardne zobrazuje číslo verzie v meta značke (tagu):
<meta name="generator" content="WordPress 4.7.2" />
Pre hackerov je číslo verzie veľmi dôležitý údaj, na základe ktorého, si vedia určiť aké zraniteľnosti mala daná verzia, takže váš web bude ľahkým cieľom. Mnoho zdrojov uvádza odstránenie verzie pridaním nasledujúceho kódu do súboru function.php vo vašej téme. (Pozor, pri aktualizácii témy sa súbor prepíše novším, pre zachovanie zmien treba používať Child Theme).
remove_action('wp_head', 'wp_generator')
Tento kód samozrejme verziu WordPressu v meta tagu odstráni, ale tá sa dá zistiť aj z ciest k css štýlom a skriptom.
<link rel='stylesheet' id='the-monday-style-css' href='https://../style.css?ver=4.7.2' type='text/css' media='all' />
Číslo verzie môže obsahovať aj RSS generátor.
Pre skrytie verzie vo všetkých spomenutých častiach som našiel toto zaujímavé riešenie https://premium.wpmudev.org
/* Hide WP version strings from scripts and styles * @return {string} $src * @filter script_loader_src * @filter style_loader_src */ function fjarrett_remove_wp_version_strings( $src ) { global $wp_version; parse_str(parse_url($src, PHP_URL_QUERY), $query); if ( !empty($query['ver']) && $query['ver'] === $wp_version ) { $src = remove_query_arg('ver', $src); } return $src; } add_filter( 'script_loader_src', 'fjarrett_remove_wp_version_strings' ); add_filter( 'style_loader_src', 'fjarrett_remove_wp_version_strings' ); /* Hide WP version strings from generator meta tag */ function wpmudev_remove_version() { return ''; } add_filter('the_generator', 'wpmudev_remove_version');
Číslo verzie, síce len hlavnej, sa nachádza aj v súbore readme.html. Pridaním nasledujúceho riadku do súboru .htaccess budeme predstierať, že ten súbor vôbec neexistuje.
RewriteRule ^readme.html - [L,R=404]
Keďže na všetkých mnou spravovaných weboch udržujem vždy aktuálnu verziu WordPressu, preto číslo verzie zvyčajne neskrývam. Skrytie čísla verzie podľa môjho názoru nejako zásadne nepomôže k zlepšeniu bezpečnosti, no zároveň jej neublíži.
Skontrolovať nastavenie práv k súborom a zložkám
Správne nastavenie práv chráni WordPress proti bezpečnostným exploitom. Pre hackera je pri správne nastavených právach náročné manipulovať so súbormi na serveri tak, aby prevzal vládu nad webom.
Správne oprávnenia by mali byť nasledovné:
- Všetky adresáre práva na 755 alebo 750
- Všetky súbory na 644 alebo 640
- Súbor wp-config.php na 600
Zmeniť prefix wp_ v databáze
Začneme zálohou databázy, pretože ide o dosť veľký zásah do nej.
Najprv zmeníme prefixu v konfiguračnom súbore wp-config.php. Nájdeme riadok:
$table_prefix = 'wp_';
a zmeníme mu hodnotu wp_ na nejaký náhodný sled znakov. Povolené sú len malé a veľké rímske písmená, číslice, znak doláru a podčiarkovník [0-9, a-z, A-Z $ _].
$table_prefix = 'wp_afU856_';
Zmenu v samotnej databáze vykonáme nasledujúcim SQL príkazom (platí v prípade základnej inštalácie WordPressu. Ak máme v databáze viac tabuliek, ktoré si vytvorili témy a pluginy, treba ich doplniť do príkazu):
RENAME table 'wp_commentmeta' TO 'wp_afU856_commentmeta'; RENAME table 'wp_comments' TO 'wp_afU856_comments'; RENAME table 'wp_links' TO 'wp_afU856_links'; RENAME table 'wp_options' TO 'wp_afU856_options'; RENAME table 'wp_postmeta' TO 'wp_afU856_postmeta'; RENAME table 'wp_posts' TO 'wp_afU856_posts'; RENAME table 'wp_terms' TO 'wp_afU856_terms'; RENAME table 'wp_termmeta' TO 'wp_afU856_termmeta'; RENAME table 'wp_term_relationships' TO 'wp_afU856_term_relationships'; RENAME table 'wp_term_taxonomy' TO 'wp_afU856_term_taxonomy'; RENAME table 'wp_usermeta' TO 'wp_afU856_usermeta'; RENAME table 'wp_users' TO 'wp_afU856_users';
Ďalej budeme musieť upraviť takzvanú „WordPress options table“.
Tento SQL výber (Select) nám vráti všetky riadky, ktoré obsahujú v stĺpci „option_name “ starý prefix „wp_“. Cieľom je premenovať všetky možnosti, ktoré začínajú na wp_ do nového prefixu.
SELECT * FROM `wp_afU856_options` WHERE `option_name` LIKE '%wp_%'
Rovnaký postup je aj pri tabuľke usermeta:
SELECT * FROM `wp_VzQCxSJv7uL_usermeta` WHERE `meta_key` LIKE '%wp_%'
Prefix názvov tabuliek by mal vedieť zmeniť aj bezpečnostný plugin iThemes security, ale ja osobne mám radšej, keď mám všetko pod kontrolou a viem čo sa deje v databáze.
SSL certifikát – https://
Zabezpečené SSL pripojenie sa snažím používať na každom webe, na ktorom pracujem. Ak používate klasické HTTP pripojenie, vaše meno a heslo sa posiela po internete nezašifrované. Certifikáty vydávané certifikačnou autoritou Let’s Encrypt predstavujú bezplatnú alternatívu k bežne používaným plateným certifikátom a dobré hostingy by mali ponúkať aj túto, bezplatnú variantu. Minimálne sa odporúča vynútiť SSL pre administrátorské rozhranie. Ja osobne preferujem beh celého webu na SSL.
Pridaním tohto riadku do wp-config.php sa vynúti SSL pre administrátorské rozhranie:
define('FORCE_SSL_ADMIN', true);
Na záver
by som chcel povedať, že žiadne zabezpečenie nikdy nebude na 100%, ale vyššie spomenuté opatrenia v kombinácii s niektorým správne nastaveným security pluginom, napríklad iThemes Security alebo Wordfence Security, môžu dosiahnuť veľmi dobré výsledky. Rád vám so zabezpečením vášho webu pomôžem, mám zakúpenú platenú verziu pluginu iThemes Security PRO, s neobmedzeným počtom licencií. Kontaktné informácie nájdete pod týmto blogom.
0 komentárov