Níže uvedené tipy jsou doporučením jak lze lépe zabezpečit WordPress. Sám většinou používám jen některé tipy. Před nastavením zabezpeční zálohujte .htaccess soubor. Budu rád za upozornění, přípomínky a další tipy.
- Nepoužívejte uživatelské jméno admin
- Použijte silné heslo
- Omezte práva souborů a složek
- Zálohujte
- Zabezpečte přihlašovací stánku
- Aktivujte SSL (HTTPS)
- Zamkněte složku WP-ADMIN
- Zamkněte přihlašovací stránku wp-login.php
- Vypněte editaci šablon a pluginů z administrace
- Vypněte XML-RPC Pingback
- Zamezte zjištění uživatelského jména
- Instalace více WordPressu na webhostingu
- Zablokujte PHP ve složce uploads
- Další bezpečnostní tipy
1. Nepoužívejte uživatelské jméno admin
Nejčastěji atakovaná uživatelské jména jsou: admin, test, user, administrator a další, viz statistiky z DDOS útoku na WordPress. Tato jména rozhodně nepoužívejte. Pokud již máte uživatelské jméno admin, je třeba ho zrušit zřízením nového uživatele, přidáním admin práv (+ super admin v případě WPMU), odlogovat se, přihlásit se jako nový admin a smazat původní účet. Při smazání přesuňte všechny články a nového admina. Nejdříve vždy zálohujte databázi.
2. Použijte silné heslo
Podívejte se na nejpoužívanější hesla při DDOS útoku na WordPress, takové určitě nepoužívejte: admin, 123456, password, 12345678, 666666, 111111, 1234567, qwerty, 23321, 12345, 123123 a další, viz odkaz statistiky výše. Pokud máte hesel více, můžete využít nástroj na správu hesel, jako je LastPass a další.
3. Omezte práva souborů a složek
Nastavení omezení složek je preventivní a doporučujeme nastavit níže uvedené hodnoty. Dejte pozor na některé konkrétní pluginy které mohou vyžadovat něco jiného!
- CHMOD hodnota pro složky 755 nebo 750.
- CHMOD hodnota pro soubory 644 or 640.
- wp-config.php by měl mít práva 600.
- .htaccess nastavte 440 nebo 444. – Pozor, nikdo pak nebude mít možnost upravovat soubor, dokud přes FTP zvýšit práva na 644.
4. Zálohujte
Záloha má obecně dvě části. Hlavní je záloha databáze (obsahující články, komentáře, nastavení atd.) a druhá, také důležitá, je záloha souborů na FTP (fotky, přílohy článků, šablona atd.). Zálohy je nejlepší udělat na jiné místo, ideálně na jiný server přes FTP nebo na úložiště typu Dropbox, Google Disk atd.
Pluginy pro backup
- BackWPup (zdarma) – umí zálohovat do cloudu, lze nastavit zálohu databáze a souboru zvlášť.
- UpdraftPlus (zdarma) – druhý skvělý pluugin na zálohy, ale i na migraci či klonování. Umí zálohovat do cloudu.
- BackupBuddy (placený) – kvalitní placený plugin.
- VaultPress (placený) – celkem dost lidí ho doporučuje, placený plugin od WordPress.com.
5. Zabezpečte přihlašovací stránku
Nastavte maximální počet chybných přihlášení v určitém časovém úseku. Například v rámci 5 minut dovolte max. pětkrát špatně se přihlásit. Pokud někdo zadá pošesté špatné heslo, pak dostane ban na IP adresu na 15 minut. Po tuto dobu se nejde přihlásit z dané IP adresy. Toto je opravdu důležité, nevěřili byste kolik robotů projíždí WordPress weby a zkouší se prolomit dovnitř pomocí odhadnutí přihlašovacího jména a hesla.
Zde jsou tipy na pluginy:
- iThemes Security & WordFance – top bezpečnostní pluginy pro WordPress, které toho umí daleko více.
- Limit login attemps – jednoúčelový plugin.
6. Aktivujte SSL (HTTPS)
Nastavte SSL šifrování tedy HTTPS pro celý web. Můžete využít SSL certifikát zdarma „Let's Encrypt“. Požádejte svůj webhosting o radu, jak aktivovat HTTPS.
7. Zamkněte složku WP-ADMIN
Díky jednoduchému zápisu do .htaccess ve /wp-admin/ složce máte možnost omezit přístup pouze na konkrétní IP adresu. Vytvořte .htaccess ve složce /wp-admin/ a vložte do něj kód, viz níže. Editujte IP adresu „xx.xx.xx.xx“ na tu vaši, případně jich udejte více.
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "WordPress Admin Access Control"
AuthType Basic
<LIMIT GET>
order deny,allow
deny from all
# whitelist IP address doma
allow from xx.xx.xx.xxx
# whitelist IP address prace
allow from xx.xx.xx.xxx
</LIMIT>
8. Zamkněte přihlašovací stránku wp-login.php
Odlehčenou alternativou k zamknutí administrace je zamknutí přihlašovací stránky a povolení pouze konkrétních IP adres. Stačí opět zápis do .htaccess, ale tentokrát v hlavní složce /WWW/.
Použijte tento kód:
# Blokace přístupu k login stránce jen z vybraných IP
<Files wp-login.php>
order deny,allow
allow from x.x.x.x
deny from all
</Files>
9. Vypněte editaci šablon a pluginů z administrace
Vypnutí editace souborů z administrace WordPressu je celkem jednoduchá věc. Místo toho editujte šablony a pluginy přes FTP. Stačí pouze tento zápis do wp-config.php:
define('DISALLOW_FILE_EDIT', true);
10. Vypněte XML-RPC Pingback
Od verze WordPressu 3.5 byl XML-RPC zapnut již v základu. Tato funkce umožňuje vzdáleně připojit WordPress na blogovací klienty. Je také používán na trackbacky a pingbacky. Bohužel hackeři využívají tento soubor a utočí na něj DDOS útokem. Některé bezpečnostní pluginy umí omezit nebo zakázat XML-RPC, můžete to však vypnout i pomocí zápisu v .htaccess souboru.
Plugin iThemes Security nově umí zabezpečit i XML-RPC. Můžete nastavit tři stavy:
- Off = funkce XMLRPC je zapnutá.
- Only Disable Trackbacks/Pingbacks = vypne trackback/pingback, ale ostatní funkce budou fungovat. Některé jsou potřeba pro služby jako Jetpack nebo aplikaci WordPress Mobile.
- Completely Disable XMLRPC – kompletně vypne XMLRPC.
Vypnutí XML-RPC pomocí zápisu v .htaccess
# Blokace xmlrpc.php pokud nepoužíváte mobilní WP aplikace nebo speciální pluginy
<FilesMatch "^(xmlrpc\.php)">
order deny,allow
deny from all
#JetPack + other Automattic networks
allow from 76.74.254.0/25
allow from 216.151.209.64/26
allow from 66.135.48.128/25
allow from 69.174.248.128/25
allow from 76.74.255.0/25
allow from 216.151.210.0/25
allow from 76.74.248.128/25
allow from 207.198.112.0/23
allow from 207.198.101.0/25
allow from 198.181.116.0/24
allow from 192.0.64.0/18
allow from 66.155.38.0/24
allow from 209.15.21.0/24
allow from 64.34.206.0/24
</FilesMatch>
11. Zamezte zjištění uživatelského jména
Divili jste se někdy, jak mohl robot zjistit vaše uživatelské jméno a už jen tipuje hesla? Stačí do prohlížeče napsat domena.cz/?author=1, poté se přesměruje na domena.cz/author/jmeno/. Zkuste si to na svém WordPressu. Díky za tip Vladimírovi Smitkovi a jeho prezentaci z 3. WordPress konference.
Tento zápis vložte do .htaccess:
# Blokace zjišťování uživatelských jmen
RewriteCond %{QUERY_STRING} author=
RewriteRule ^(.*)$ - [R=403,NC,L]
12. Instalace více WordPress na webhostingu
Pokud máte v subadresáři další instalaci WordPress nebo jiného systému a ta se nakazí, způsobí to automaticky i nakažení dalších WordPress na stejném webhostingu. Smažte nepoužívané instalace WordPress na subdoméně nebo v subadresáři.
Martin v komentářích popsal zkušenost, jak zapomenutá instalace WordPress v subadresáři „haknula“ a shodila celý webhosting (doménu). Testovací instalace WordPressu zůstala zapomenutá, neaktualizovala se, později byla hacknuta, rozesílala spam a napadla i hlavním instalaci WordPress v root adresáři.
13. Zablokujte PHP ve složce uploads
Vložením souboru .htaccess s níže uvedeným kódem zakážete spouštění PHP skriptů ve složce /wp-content/uploads/.
# Blokace přímého přístupu k php souborům v uploads složce
RewriteRule ^(.*)/uploads/(.*)\.php$ - [F]
Další bezpečnostní tipy
- Dejte pozor, odkud se přihlašujete. Používejte jen svůj počítač a mobil na přihlášení do administrace. V žádném případě se nepřihlašujte v kavárně nebo u kamaráda a podobně.
- Aktualizujte, aktualizujte, aktualizujte
- Smažte nepoužívané uživatele
- Smažte nepoužívané šablony nechte jen aktivní šablonu a jednu základní např. Twenty Ten
- Smažte nepoužívané pluginy
- Dejte vždy (zákazníkovi, redaktorům) co nejnižší možná práva, nedávejte jim administrátorské práva
- Méně pluginů znamená lépe
- Secret keys – zkontrolujte si, jestli se vám při instalaci vygenerovali secret keys v wp-config.php, pokud se tak nestalo, můžete je vygenerovat zde
- Použijte SFTP namísto FTP – ověřte si, jestli umí váš hosting SFTP, a použijte jej namísto FTP
- sitecheck.sucuri.net – Online kontrola webu, zda jste na blacklistu přímo na nástěnce
Zdroje informací:
- premium.wpmudev.org/blog/keeping-wordpress-secure-the-ultimate-guide/
- http://www.sitepoint.com/wordpress-security/
- http://www.groovypost.com/howto/howto/improve-wordpress-securitty-wp-config-php-location/
- www.slideshare.net/vsmitka/wordpress-zklady-bezpenosti
- ebook „locking down wordpress“ volně ke stáhnutí
- https://www.wpbeginner.com/plugins/how-to-disable-xml-rpc-in-wordpress/
- Htaccess vzor: https://github.com/NasWP/naswp-kit-atomic/blob/master/.htaccess
Kvalitní a povedený článek. Díky za vyčerpávající informace ohledně bezpečnosti WordPressu, myslím, že pomůže nejen mě, ale i spoustě další lidí ve zvýšení zabezpečení webů.
Dobrá práce ..díky
Vyčerpávající článek, vidím že mám pořád mezery s WP.
Super práce, dávám +1
Článek o htaccess http://www.onextrapixel.com/2011/11/03/unleashing-htaccess-for-wordpress/
Prosím o info a radu, zda se s tím někdo setkal a jakou bezpečnostní část článku mohu na toto použít, aby se to již neopakovalo, když mi asi před necelým měsícem došel email od googlu, že mě z důvodu nebezpečných stránek a to konkrétně pishingu vyřazují z vyhledávání. Já jsem hned šla kontrolovat stránky, mám tam zatím jen šablonu a teprve se na práci s ní chystám – nicméně se nějak nějaký robot či co dostalo do tinymce a následně do tématu stránek a nahrálo mi tam následující soubor: respektive byl tam i zip souboru, vše sem smazala a v inkriminovanou dobu, kdy tam tyto souboru něco nebo někdo narhál, jsem na svém wp vůbec nebyla.
//mydigest.net/wp-includes/js/tinymce/themes/advanced/skins/yahoo/login.html
Může mi někdo poradit jak a co změnit, abych se vyvarovala podobných kulišáren? Heslo mám dobré, ale mohu změnit na lepší, admin mám původní myslím tak jej změním též, není problém, ale co ještě?
Pokud budete potřebovat pomoci, zadejte se na forech webtrhu nebo na separatistovi. Je to nastavování pro pokročilého uživatele WP.
Google ban zkontrolujete pomocí tohoto odkazu (url změnte na Vaší): http://www.google.com/safebrowsing/diagnostic?site=bigdrobek.com
Dobrý den,
četla jsem váš článek o bezpečnosti a vyzkoušela scanner. Bohužel výsledek byl takový:
Warning: Malicious Code Detected on This Website!
Stránky teprve vytvářím, prosím, poradíte co s tím?
Veronika
Dobrý den Veroniko, zřejmě jste použila plugin, šablonu která má nějakou chybu nebo někdo odchytil Vaše heslo. Je hodně těžké takhle něco poradit, záleží jak tomu rozumíte a co od webu chcete. Můžete začít od znova a zjistit kde se stala chyba, nebo si na toho někoho najmout, mohu vám někoho doporučit.
Něco málo ke čtení o bezpečnosti pro WordPress:
– http://oddblogger.com/best-wordpress-security-plugin/
– http://wordpress.org/support/topic/plugin-bulletproof-security-unsolicited-positive-review-for-bullet-proof-security-plugin?replies=11
– http://gadgets-code.com/wordpress-3-x-security-plugin-review-antivirus-plugin
– http://www.wpmayor.com/plugin-reviews/top-10-essential-wordpress-security-plug-ins/
– http://markmaunder.com/2012/04/23/introducing-wordfence-the-ultimate-wordpress-security-plugin/
Velmi přínosné, na wp dělám odně malých webů, bzpečností jsem se nikdy moc nezabýval až do doby kdy mi jeden z nich někdo navštívil, skoncilo to kompletní predelavkou 🙂 Tyhle jsou k nezaplaceni.
Děkuji kdyby jsi měl dalši tip dej vědět
http://www.linkedin.com/groupAnswers?trk=view_disc&gid=154024&commentID=84289519&ut=3wp6R3zq5ZHBg1&viewQuestionAndAnswers=&discussionID=123413129
Darel Parker • Use Website Defender and WP-Security Admin to identify improperly configured folder permissions and to change your WP database table prefixes.
Use Bulletproof Security to secure and backup your .htaccess files.
Install Timthumb Vulnerability Scanner and update any vulnerable scripts. Run it every time you install a new theme.
Stick to established theme and plugin developers (WordPress.org, ThemeForest, Woo, etc.), and stay away from „free“ theme sites that distribute premium themes.
Ahoj, prosím tě, jak tam máš ten zápis do htaccessu, tak „netluče“ se to pak s tím robots.txt?
Jde mi o řádku:
Pak mám ještě dotaz:
ServerSignature Off
Options -Indexes
se dává úplně nahoru do htaccessu?
Děkuji
Teď jsem někde četl, že pokud nastavíš v robot.txt aby roboti neprocházeli nějaké adresáře, tak někteří „špatní roboti“ tohle můžou brát jako výzvu.
Takže netluče se to. Robot.txt je informace pro roboty, kterým se nemusí řídit všichni. Kdežto přes htaccess si nastavuješ svůj vlastní server aby to neumožňoval.
Myslím, že je to jedno kam to dáš.
Ahoj, zkoušel jsem na verzi 3.3.2
vložit
define(‚DISALLOW_UNFILTERED_HTML‘, true); … Zakázání vkládání nefiltrovaného html pro všechny uživetele včetně administrátora
a pozoruji problém s přístupností nabídky na instalaci pluginů, resp. se pak v adminovi nedostanu do instalace pluginů. Možná je to v nějaké souvislosti s nějakými jinými pluginy.
matně jsi pamatuji že jsem to také zkoušel a že to mělo kolizi z nějakým pluginem nebo šablonou, ale už nevím s čím 🙁
Ahoj,
díky tvému návodu jsem spustil WP, i když jsem v tomto úplný amatér, ale rád se takové věci učím. Všechno proběhlo v pořádku. Pak jsem se dostal sem k otázce bezpečnosti a vůbec nevím, jakou má mít ten soubor .htaccess strukturu, jak se to zapisuje atd. Přestaly se mi zobrazovat trvalé odkazy, když jsem si tam překopíroval toto: http://www.separatista.net/forum/topic.php?id=1179#post-6026
Mohu poprosit, zda by šlo poslat do mailu přímo to, co mám překopírovat do Word Padu, co uvádíš zde na stránkách?
Jsem prostě jen uživatel, co si to chtěl spustit sám, ale teď už fakt nevím 🙁
1) místo wordpadu použij nějaký textový editor – já používám PSPad (wordpad může dělat problémy se znakovou sadou)
2) jaký kód jsi tam zkopíroval? Nechal jsi tam kod který tam vložil WordPress?
3) Klidně se registruj na foru a polož otázku do dané diskuze byt je půl roku stará 🙂
K bodu 13 – když jsem to vložil do základního .htaccess v kořenovém adresáři přestal mi fungovat web.
Dík
Na některém hostingu to dělá toto:
# Zakáže procházení adresářů vašeho serveru
Options -Indexes
Smažu to z návodu, dobrá připomínka. Díky
Aktualizace bodu 8 zamknutí /wp-admin/ odzkoušení na wedosu +wpmu
Super článek, k limitaci uživatelů mi tam chybí plugin User Locker http://wp-news.cz/news/user-locker/
Používám Limit login attempt (BWS) na odstranění „brute force attack“ to si myslím že plně dostačuje z hlediska bezpečnosti. IP dostane na 15 min ban a je jedno jaký uživatel.
Ahoj, na zálohu (export) databáze používám plugin Adminer, který si pro potřeby provedení zálohy vždy v administraci aktivuji. Pak kompletní export obsahu. Nepřijdu tak o to nejdůležitější, tj. obsah.
Já používám better wp security pokud je db menší jinak automaticky odlévám zálohy na Dropbox pomocí smapshot pluginu.
Zajímavý článek na téma brute force attack na WordPress http://www.duben.org/wordpress/prevence-brute-force-attack-na-wordpress-s-pretizenim-serveru
Mám otázku k bodu 7. Kam do souboru wp-config.php mám vložit ty řádky
define(‘FORCE_SSL_LOGIN’, true);
define(‘FORCE_SSL_ADMIN’, true);
Vložil jsem je na konec souboru ale přihlašování mi stále probíhá přes http a nepřesměruje se na HTTPS. Pokud zadám ručně HTTPS tak to je OK, takže SSL funguje.
Funguje to na šechna přihlášení do administrace nebo jen na některé konkrétní username?
kód vložit před /* That’s all, stop editing! Happy blogging. */
Pak je myslím ještě třeba na hostingu aktivovat SSL. Někde umožnují použít sdílené SSL pro přihlášení admina
define(‘FORCE_SSL_LOGIN’, true); - pro všechny uživatele
define(‘FORCE_SSL_ADMIN’, true); - pro adminy
Je třeba to více otestovat. Pro více info koukni sem:
http://premium.wpmudev.org/blog/wordpress-ssl-login/ detailní nastavení
http://www.wpbeginner.com/wp-tutorials/how-to-secure-your-wordpress-pages-with-ssl/ – plugin
Díky za spoustu užitečných tipů, jen takový postřeh:
Mj. jsem vyzkoušel bod 11 na premium šabloně, která má mnoho vlastních nastavení. A pokud v wp-config.php zakážu editaci šablon a pluginů, nefunguje pak právě nastavení šablony z administrace. U osobních projektů mi to nevadí, ale zákazníkovi ano.
# zamezi zjisteni username ?author=1
RewriteRule ^author/(.*)$ http://domena_webu.cz/ [R,L]
mi nefungovalo, zato mi fungje skvěle toto:
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://www.DOMENA.cz/? [L,R=301]
akorát to řeším, že je v tom někde chybka díky za info
Ahoj,
já bych doporučil pro apache toto:
RewriteCond %{QUERY_STRING} author=
RewriteRule ^(.*)$ http://beznekam.cz? [L,R=301]
Řešení výše má 2 drobné nevýhody:
a) {REQUEST_URI} ^/$ omezuje podmínku na dotaz do kořenové složky, to je většinou ok, ale u některých webhostingů mají mapované kořenové domény subdomény pomocí .htaccess do podsložek – např. u Wedosu: zde bude v defaultu request uri něco jako /domains/domena.xy/ a ne pouze /, takže k omezení nikdy nedojde.
b) {QUERY_STRING} ^/?author testuje pouze, pokud je author hned za otazníkem a lze to pak jednoduše obejít pomocí dalšího parametru – např. /?obelsteni&author=1
Také [0-9]* říká, že se číslo muže vyskytovat i nulakrát, takže to zablokuje i author=josef, což je ok, jen se ten výraz pak tváří, že dělá něco co doopravdy nedělá (vůbec tam ta část tedy nemusi být).
Varianta co navrhuji testuje to, zda se kdekoliv v dotazu vyskytuje author=. Původně jsem měl ve výrazu author=d, který testoval zda je za rovnítkem číslice, ale to šlo obejit např. author= 1 (s mezerou) nebo author=%31 (ascii znak 1 v hexa).
Děkuji za vysvětlení a těším se na přednášku o bezpečnosti na WordCampu 🙂
Zdravím,
děkuji Vám za článek. Já osobně jsem na svém webu vyzkoušela bod 20. Ve WP nějaký ten čas pracuji, ale byl pro mě docela oříšek to, jak přepsat soubor .htaccess. Možná by bylo dobré připsat do článku pro začátečníky stručný návod, že .htaccess se dá otevřít pomocí programu, např. pomocí PsPadu či jiného. Když jsem si pak tento program nainstalovala, šel mi soubor .htaccess přepsat bez problémů. Pak uložit, nahrát FTP klientem na server, a bylo to. Při pokusu o zjištění uživatelského jména mě pak web jen přesměroval na úvodní stránku. Čili podle toho usuzuji, že se mi to povedlo. Ještě jednou Vám děkuji za článek a přeji krásný den.
Díky 🙂
Já jsem zažil hack WP a celého hostingu, když jsem zapomenul na nějakou zkušební instanci WordPressu na jedné subdoméně. Ta se neaktualizovala a skrze ni se na webhosting nahrály skripty, co začaly posílat spam. Takže další postřeh je hlídat si různé zkušební a testovací instalace wordpressu a jakýchkoli jiných RS v různých zašitých podadresářích a subdoménách, a nezapomínat to vypínat jakmile se to někde nasadí naostro nebo se rozhodne, že se to pošle k ledu.
Dobrý tip, přidám to jako další bod. Díky
Nechápu to, když děláš přece web, tak jedině na localu, ne? Testovat něco na ostro je dost o ústa 😀 (i když je pravda, jak co a kdy 🙂
Některé malé weby taky instaluji „online“…… zvláště když jde o nový web.
Perfektní článek! A díky za něj.
Jen ještě doplním. že jsem nalezl zajímavý projekt, který testuje bezpečnost WP stránek. Více: http://www.remake.cz/automaticke-testovani-bezpecnosti-vaseho-wordpress-webu/
Díka za tip na nástroj, článek odkazuje na https://suite.websecurify.com/launchpad/