Dnes mě tak napadlo, jakým způsobem je zabezpečen redakční systém WordPress, a jak je to s veškerými pluginy a dalšími podobnými věcmi používanými v tomto redakčním systému.
Vzhledem k tomu, jak často se setkávám s novými weby běžící právě na tomto redakčním systému, rozhodl jsem se napsat pár rad, které by Vám, jako uživatelům a správcům tohoto redakčního systému mohli pomoci.
Co pravděpodobně nevíte…
Redakční systém WordPress má možnost přidat v dnešní době už poměrně slušné množství pluginů, které základní redakční systém poměrně rozšíří o mnoho užitečných funkcí, které samotný systém nemá. Nicméně s každým novým pluginem existuje mnoho rizik. Věděli jste, že zdrojový kód pluginu může obsahovat jakýkoliv kód? Může obsahovat cokoliv a nikdo to nekontroluje, tedy myslíte že je rozumné jít cestou, že zkusíte několik pluginu a který Vám bude vyhovovat nejvíce, ten použijete?
Útočníkovi většinou nepůjde o Vaše příspěvky, které píšete, bude chtít třeba emailové adresy všech registrovaných uživatelů a nebo rovnou přístupové údaje k databázi. Odeslání takovýchto informací je otázka jen pár řádků.
Dále mě napadá, že WordPress je čím dál tím víc populární a pořád se objevují nové blogy, které jej využívají. Jistě jste si všimli, že pořád vychází nové verze, není to jen pro srandu králíkům, napadlo Vás někdy, že mohou obsahovat zabezpečení chyb? A že každá aktualizace má nějaký důvod?
Nyní se už konečně podíváme, jak redakční systém zabezpečit.
Začneme přístupovými údaji, vím, pořád se to omývá dokola, pořád je to to samé, ale většina na to zvysoka kašle a pak udělá co? Brečí… a to na všech možných fórech co najde, jak je tohle na nic, jak to nefunguje a tak podobně… Používejte tedy proto složitá hesla, 12 a více znaků složené z malých a velkých písmen a k tomu nějaké číslo je naprosto optimální. Tato rada neplatí jen pro WordPress… používejte takové hesla pro emaily, FTP, databáze, přihlášení do online her, do PC, prostě všude, kde po Vás chtějí heslo, mějte alespoň takto složité. Další co by mělo být, tak databáze, účet k WordPressu a účet k FTP by neměli být stejné.
Když už jsem zde zmínil databázi, jistě víte, že všechny tabulky ve WordPressu mají prefix wp_, no, není na škodu to trochu změnit a dát tomu jiný prefix, už jen kvůli tomu, že případného útočníka tím trochu zdržíte.
Ještě se trochu vrátím k uživatelským účtům, není úplně vhodné používat a vůbec mít na webu účet admin s právy na naprosto cokoliv, vytvořte si jiný pro správu webu a tento smažte, je to bezpečnější, dokonce i pokud publikujete s nějakým nickem, odeberte si práva na správu redakčního systému, je to sice otravné, to chápu, musíte totiž přepínat mezi účty kdykoliv kdy něco potřebujete nastavit, ale může Vám to kolikrát zachránit web.
WordPress má několik chyb… asi ta nejzásadnější je, že není nijak chráněn před brute force metodou uhádnutí hesla, proti tomuto útoku se lze bránit třeba pluginem Limit Login Attempts, ve kterém lze nastavit maximální počet chybně zadaných pokusů o přihlášení a obsahuje navíc i pár vychytávek. A pokud Vás vychytávky nijak neoslní, třeba alespoň oceníte, že je celý v češtině 😉
Další čemu by jste se měli vyvarovat je záloha kompletně celé databáze v nějaké složce na webu, opravdu větší blbost uděláte jen těžko, tedy pokud například používáte plugin WordPress Database Backup který má možnost ukládat zálohu celé DB do složky s pluginem, ne, že Vás napadne to tam ukládat, posílejte si to třeba na email, nebo stahujte přímo do PC, hlavně neukládat… nevěřili by jste, kolik záloh databází se dá najít na Googlu…
Nyní něco pro uživatelé, kteří vědí, co dělají a k čemu přesně slouží soubor .htaccess, tyto řádky je poměrně dobré do něj umístit, nicméně, nechám to na Vás, co s tím uděláte.
Vypnutí zobrazení informací o serveru
ServerSignature Off
Další co je vhodné zakázat je možnost procházení adresářů vašeho serveru
Options -Indexes
tyto dvě nastavení by tam prostě měli být, ale podíváme se dále. Je vhodné zakázat přístup k některým souborům na webu, ten první je již zmíněný .htaccess, tím dalším je soubor htpasswd, obecně, je lepší zakázat přístup ke všem souborům ini, phps, log, sh, bak, backup, sql, je jich jistě více, nicméně mě teď žádné další nenapadají, provedeme to takto:
<FilesMatch "\.(htaccess|htpasswd)$"> Order Allow,Deny Deny from all </FilesMatch> <FilesMatch "\.(ini|phps|log|sh|bak|backup|sql)$"> Order Allow,Deny Deny from all </FilesMatch>
Dobré je také zabezpečit soubor wp-config.php, ve kterém je asi to nejdůležitější z vašeho webu:
<files wp-config.php> order allow,deny deny from all </files>
K htaccessu je to asi vše. Další poměrně zrádný soubor je soubor robots.txt, jedná se o soubor, ve kterém je nastavení pro vyhledávací roboty, ke kterým položkám na webu přístup mají a ke kterým ne… Správný vyhledávací robot, jako je třeba Googlebot to dodržuje, jiný na to zvysoka kašle a prostě web proleze, nastavení by mohlo být třeba takové:
User-agent: * Disallow: /cgi-bin/ Disallow: /wp-admin/ Disallow: /wp-includes/ Disallow: /wp-content/plugins/ Disallow: /wp-content/maintanence.php Disallow: /wp-content/db-error.php Disallow: /wp-content/cache/ Disallow: /wp-content/themes/ Disallow: /wp-content/languages/ Disallow: /wp-content/upgrade/ Disallow: /trackback/ Disallow: /feed/ Disallow: /comments/ Disallow: /category/*/* Disallow: */trackback/ Disallow: */feed/ Disallow: */comments/ Disallow: /*? Allow: /wp-content/uploads/
Je asi tedy jasné, co přesně robotům zakazujeme indexovat, co přesně jim povolíme indexovat.
Další co mě v tuto chvíli napadá je přímo verze WordPressu, je vhodné, aby nebylo vidět, o jakou verzi jde, přidejte tedy do souboru functions.php ve vaší šabloně tento kus kódu:
remove_action('wp_head', 'wp_generator');
Útočník pak totiž nebude vědět, s jakou verzí WordPressu má tu čest, což ho možná odradí.
[error]K úpravám co jsou popsané výše si dovolím jen malou připomínku, je možné, že některé nastavení, které jsem výše popsal znemožní funkčnost některých pluginů, proto je dobré po nastavení vše na webu otestovat, aby vše fungovalo tak, jak má.[/error]
Poslední co asi zmíním je nastavení práv na jednotlivých souborech a složkách na webu. Pokud jste někdy na webu něco nastavili na 777, tedy práva na vše, raději web rovnou smažte a jakýmkoliv zabezpečením se prostě nezabývejte… nemá to totiž cenu…, pro ty co ale chtějí mít web pod palcem, doporučují nastavení přibližně takto:
Souboru wp-config.php nastavit práva na 600, ostatním na 640
Složkám wp-admin a wp-includes na 705
Složce wp-content na 755
[error]Po tomto nastavení opět zkontroluje vše, jestli funguje tak jak má, ale mělo by ;)[/error]
Na toto téma existuje mnoho článků, stačí jen použít Google 😉