Säkra din WordPress-hemsida

Ungefär en tredjedel av alla hemsidor är byggda i WordPress, och för mindre företag är denna siffran ännu högre. WordPress är ett snabbt och smidigt sätt att komma igång med en bra hemsida, men har tyvärr haft en hel del säkerhetsproblem, framförallt på grund av de tillägg (plugins) som används för att utöka funktionaliteten.

Igår var det många som fick sina WordPress-sidor hackade, och ett nytt administratörskonto skapat. Säkerhetshålet som används är i tillägget WP GDPR Compliance, som många installerat för att kunna följa EUs nya integritetslagstiftning. Problemet med tillägget är nu åtgärdat, och en uppdaterad version kan laddas hem. Har du redan blivit hackad, så är det första du måste göra att uppdatera alla tillägg, och sedan ta bort den eller de användare som skapats. Om du har backup av WordPress, så bör du för att vara helt säker installera om och återskapa från backup, eftersom det är möjligt att det även installerats tillägg eller gjorts andra ändringar för att ge hackern en bakdörr in i systemet.

Hur du vet om du blivit hackad?

Så länge den som gjort intrånget inte städat upp efter sig, så är det ganska enkelt att se. Om du använder insticket, så är chansen stor att du redan blivit attackerad. Jag har set försök till attack på alla domäner jag har hemsidor på, oavsett om det är WordPress eller inte. Titta på användarlistan i WordPress, och om du ser ett administratörskonto som du inte känner till, så ta bort det.

Har du tillgång till loggarna för din webserver, så kommer du antagligen se något liknande detta. Titta framförallt efter “/wp-login.php?action=register”.

109.234.37.214 - - [08/Nov/2018:13:30:32 +0000] "GET / HTTP/1.1" 200 13659
109.234.37.214 - - [08/Nov/2018:13:30:32 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 42
109.234.37.214 - - [08/Nov/2018:13:30:33 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 42
109.234.37.214 - - [08/Nov/2018:13:30:33 +0000] "POST /wp-login.php?action=register HTTP/1.1" 302 20
109.234.37.214 - - [08/Nov/2018:13:30:40 +0000] "GET /wp-login.php?checkemail=registered HTTP/1.1" 200 1303
109.234.37.214 - - [08/Nov/2018:13:30:41 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 42
109.234.37.214 - - [08/Nov/2018:13:30:41 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 42

Mer om detta säkerhetshål

Artikel från Wordfence
WP GDPR Compliance

Sätt att förhindra att du blir hackad

Undvik onödiga tillägg

Det är ofta tillägg som gör det möjligt för utomstående att ta sig in i WordPress. Ta för vana att gå igenom vilka tillägg du har, och fundera över om de verkligen är nödvändiga? Framförallt om det är tillägg som inte längre utvecklas aktivt.

Håll dig uppdaterad

Se till att alltid hålla WordPress och plugins uppdaterat. Detta är nog det viktigaste du kan göra får att säkra din hemsida.

Använd säkerhetsprogram

Ett exempel är Wordfence, som installeras som tillägg i WordPress.

Serverkonfiguration

Du som är tekniskt lagd, och har tillgång till konfigurationsinställningar för din webserver (eller möjlighet att använda .htaccess), kan överväga att låsa WordPress admin till kända IP-adresser. Det skyddar inte mot allt, men är ändå en bra del i ett bredare säkerhetsarbete, och hade hindrat att någon från Ryssland tar sig in med hjälp av det aktuella säkerhetshålet.

Mitt recept ser ut ungefär såhär, och jag har stoppat det i en config-include för Apache.

<Location ~ "/(wp-admin|wp-.*.php)">
  <LimitExcept _ALLA_METODER_>
    Order Deny,Allow
    Deny from All
    # Tillåt från servern själv (behövs för wp-cron)
    Allow from 192.168.1.1
    # Tillåt från mitt kontor
    Allow from 10.1.1.1
    # Tillåt från mitt mobilnät
    Allow from 172.16.0.0/12
  </LimitExcept>
</Location>

IP-adresserna är förstås inte mina verkliga adresser. Att tillåta alla adresser från sin mobiloperatör gör det förstås möjligt för någon på samma operatör att nå WordPress admin, men jämfört med att tillåta det från hela världen, så ökas säkerheten avsevärt. Om du inte har en fast IP-adress, så kan du tillåta hela operatörens nät där också.

Om du använder .htacccess, så kan du inte använda Location, utan får istället experimentera använda FilesMatch, för att blocka wp-login.php. För wp-admin, kan du blocka hela katalogen. Du kan inte heller fuska med LimitExcept, utan får använda Limit.
Något i stil med:

<FilesMatch "(wp-.*.php$)">
  <Limit GET HEAD POST PUT DELETE CONNECT OPTIONS PATCH>
    Order Deny,Allow
    Deny from All
    # Tillåt de adresser du behöver
  </Limit>
</FilesMatch>

Samma sak fast utan FilesMatch kan användas i katalogen wp-admin.