WordPress on yksi maailman tunnetuimmista ja käytetyimmistä sisällönhallintaohjelmistoista, joten se on yksi yleisisimmistä kohteista, mihin rikolliset yrittävät murtautua verkossa. Yleensä sivustoihin istutetaan haitallista koodia esimerkiksi mainoksia, uudelleenohjaus scriptejä, sähköpostiroskaposti robotteja tai jopa nykyisin kryptovaluutan mainaus scriptejä.
Olen koonut tähän yleisesti mitä suosittelen jokaiseen WordPress-asennukseen tehtäväksi.
Table of Contents
Varmuuskopioi säännöllisesti
Tärkein ensimmäiseksi, eli varmuuskopiointi. Varmuuskopioimalla WordPress-asennuksesi tietokantoineen säännöllisesti, esimerkiksi viikottain, helpottaa paljon sivustosi palautusta esimerkiksi haittaohjelman hyökkäyksen jälkeen. Yleensä näiden hyökkäysten jälkeen sivustojen palauttaminen on haastavaa ilman varmuuskopiointia.
Varmuuskopiointi kannattaa tallentaa aina ulkoiselle palvelimelle, minne haittaohjelmalla ei ole suoraa yhteyttä. Myös oman työaseman kiintolevy on hyvä kohde.
Käyttöoikeudet kuntoon
Varmista nyt että WordPress-tunnuksesi ja salasanasi eivät ole perus ”admin” ja ”admin” tai jotakin sinnepäin yhdistelmä. Näillä WordPressiin pääsee todella helposti kirjautumaan sisälle.
Poista WordPressissä rekisteröinti-ominaisuus pois käytöstä. Sen saa poistettua käytöstä kirjautumalla WordPressin hallintapaneliin -> Asetukset sivulla.
Lisää kuvavarmenne kirjautumisruutuun estääksesi ”Brute Force”-yritykset eli salasanojen arvaamisen. WordPressille löytyy useita laajennuksia tätä varten.
Ota sivustolle HTTPS-käyttöön oletuksena
Nykyisin on saatavilla ilmainen HTTPS eli SSL/TLS-salaus, jonka avulla suojaat kaikkien vierailijoiden liikenne sivustollesi. Tässä ei ole koskaan haittaa ja parantaa tietoturvaa ja lisäksi myös sijoitusta hakukoneissa.
HTTPS:n on useimmilla palveluntarjoajilla maksutonta ja käyttää Let’s Encrypt SSL-sertifikaattia. Suosittelen kysymään omalta palveluntarjoajaltasi apua kuinka ottaa tämän käyttöön.
Uudelleenohjaus HTTPS:n onnistuu määrittämällä seuraavanlaisen konfiguraation .htaccess tiedostoon
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
RewriteEngine On | |
RewriteBase / | |
RewriteRule ^index\.php$ – [L] | |
RewriteCond %{REQUEST_FILENAME} !-f | |
RewriteCond %{REQUEST_FILENAME} !-d | |
RewriteRule . /index.php [L] | |
# End WordPress | |
RewriteCond %{HTTPS} off | |
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/ | |
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} |
Estä pääsy hakemistoihin ja tiedostoihin
Pienennetään hyökkäyspintalaa rajoittamalla pääsyn PHP-tiedostoihin. Mikäli jossakin lisäosissa olisikin takaportti niin ei siihen olisi pääsyä suoraan verkon kautta.
- Estä pääsy palvelimen tai sivuston lokitiedostoihin
- PHP-virheilmoitukset ovat pois näkyvistä
- wp-config.php varmuuskopioita ei ole julkisesti nähtävillä mahdollisesti vuotamassa tietokannan tunnuksia
- Hakemiston selaminen (DirectoryBrowsing) on estetty
- XML-RPC suositellaan ottamaan pois käytöstä mikäli et käytä Jetpack tai WordPress puhelinsovellusta. Tämä on yleinen mihin WordPressiin usein hyökätään verkon puolelta.
Esimerkki konfiguraatio Apache2 (.htaccess):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Options -Indexes | |
<files xmlrpc.php> | |
order allow,deny | |
deny from all | |
</files> | |
<files wp-config.php> | |
order allow,deny | |
deny from all | |
</files> | |
<files ~ "^.*\.([Hh][Tt][Aa])"> | |
order allow,deny | |
deny from all | |
satisfy all | |
</files> | |
# Block the include-only files. | |
<IfModule mod_rewrite.c> | |
RewriteEngine On | |
RewriteBase / | |
RewriteRule ^wp-admin/includes/ – [F,L] | |
RewriteRule !^wp-includes/ – [S=3] | |
RewriteRule ^wp-includes/[^/]+\.php$ – [F,L] | |
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php – [F,L] | |
RewriteRule ^wp-includes/theme-compat/ – [F,L] | |
</IfModule> | |
# BEGIN WordPress | |
RewriteEngine On | |
RewriteBase / | |
RewriteRule ^index\.php$ – [L] | |
RewriteCond %{REQUEST_FILENAME} !-f | |
RewriteCond %{REQUEST_FILENAME} !-d | |
RewriteRule . /index.php [L] | |
# End WordPress | |
RewriteCond %{HTTPS} off | |
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/ | |
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} |
Lisää lisäksi .htaccess tiedostoihin wp-content/upload, wp-content ja wp-include hakemistoihin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<Files ~ "\.ph(?:p[345]?|t|tml)$"> | |
deny from all | |
</Files> |
Esimerkki konfiguraatiot Nginx-palvelimelle:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
location = ~* /xmlrpc.php { | |
deny all; | |
access_log off; | |
log_not_found off; | |
} | |
location = ~* /wp-config.php { | |
deny all; | |
log_not_found off; | |
} | |
location ~* /wp-includes/.*.php$ { | |
deny all; | |
access_log off; | |
log_not_found off; | |
} | |
location ~* /wp-content/.*.php$ { | |
deny all; | |
access_log off; | |
log_not_found off; | |
} | |
location ~* /(?:uploads|files)/.*.php$ { | |
deny all; | |
access_log off; | |
log_not_found off; | |
} |
Päivitä WordPress, teemat ja laajennukset
Päivittämistä ei voi koskaan korostaa liikaa, koska olemmehan kaikki laiskoja ja jätämme mielellämme päivittämättä. Päivittämällä kuitenkin WordPress-sivustosi, teemat ja laajennukset kuukausittaisittain vähennät riskejä tietomurroille. Mikäli muokkaat teemoja, käytäthän lapsiteemoja (Child Theme), joka tekee päivittämisestä helpompaa. Älä koskaan muokkaa laajennuksien tai teemojen koodia suoraan.
Mikäli laajennusta tai teemalle ei tule päivitystä, niin suosittelemme etsimään mahdollisesti toinen vastaavanlainen laajennus tai teema. Välillä kehittäjät hylkäävät vanhoja laajennuksia tai teemoja, joita ei jatkossa päivitetä.
Poista ylimääräiset ja epämääräiset teemat ja laajennukset
Kaikki turha laajennus ja teema, joita ei ole käytössä hidastavat vain WordPressin toimintaa ja ovat tietoturvariski, koska mitä enemmän elementtejä niin sitä enemmän haavoituvuuksia löytyy.
Piilota version tiedot
Suosittelemme piilottamaan WordPressistä versiotiedot, jotta hyökkääjällä on mahdollisimman vähän tietoa WordPressistäsi. Näin hyökkääjä ei tiedä vaikka käytössäsi olisikin vanhempi WordPress-versio.
Lisää tämä teemasi functions.php tiedostoon:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
remove_action('wp_head', 'wp_generator'); | |
function wpbeginner_remove_version() { | |
return ''; | |
} | |
add_filter('the_generator', 'wpbeginner_remove_version'); |
Asenna Wordfence-laajennus
Wordfence on yleisesti käytetty WordPress-laajennus parantamaan sivustoiden tietoturvaa. Se tunnistaa useimmat yleisimmät haitalliset ohjelmat sekä hyökkäystavat. Lisäksi tämä laajennus automaattisesti tiedottaa mahdollisista tietomurto yrityksistä ja myöskin siitä että laajennukset ovat vanhentuneet. Yksi paras ominaisuus on laajennuksessa tiedostojen vertaaminen, eli tämän avulla on helpompaa löytää haitallista koodia WordPress-sivuston ytimestä.
Tää on mahatava postuas, kiitos! Koska WordPress on tosi helppo, monet rakentavat verkkosivut käyttämällä sitä, mutta se on tosi haavoittuva iskuille. Mikä on sinun mielestäsi hyvä varmuuskopiointi ohjelma?
Hei, kiitos että pidät artikkelistani. Yleensä WordPress on altis iskuille kyllä, mutta yleisesti syynä murroille on päivittämätön asennus tai laajennuksessa / teemassa oleva tietoturvareikä.
WordPressissä on tärkeä tehdä tiedosto + tietokannasta varmuuskopiot. Käytännössä tiedostojen kopiointi (+ mielellään pakkaus niin säästää tilaa) ja tietokannan exporttaus omalle koneellekin on riittävä keino. Yleensä webhotellipalveluissa käyttävässä cPanelissa on valmiina varmuuskopiointi FTP-palvelimelle, jota itse käyttänyt paljon tai sitten olen scriptillä tehnyt varmuuskopioinnin.