wordpress-sikkerhed

WordPress sikkerhed


WordPress er et af de mest brugte CMS systemer og bliver derfor tit udsat for ondsindede angreb. Når det går galt, er det som regel, fordi selve kernen i WordPress ikke er blevet opdateret, gratis temaer og plugins ikke får sikkerhedspatches eller grundet meget svage login-detaljer. Så sørger du for, at de tre ting er på plads, så har du en ret sikker WordPress-installation.

I nogle tilfælde kan det dog godt betale sig at gøre det ekstra svært for uvedkommende at få adgang til sin installation. Derfor har jeg taget en snak med Martin Skovvang, der er Software Engineer hos modeportalen Katoni.

Her vil han komme med gode råd samt eksempler på, hvordan man gør sin WordPress-installation mere sikker.

Martins første råd er at vælge en svær adgangskode og altid sørge for, at både WordPress, plugins og temaer er opdateret til seneste version. Det er de mest basale og simple forholdsregler, alle WordPress-ejere bør tage sig – og det kræver ingen teknisk viden, så der er ingen undskyldning. Vær desuden opmærksom på, hvilke og hvorfra du henter dine plugins og temaer? – det er typisk i disse, at der findes sikkerhedshuller.

En anden vigtig ting, du skal være opmærksom på, er hvorfra du logger ind på WordPress. Hvis din hjemmeside ikke er beskyttet med SSL, og du logger på fra et delt netværk, f.eks. i lufthavnen eller en café, kan andre brugere på netværket opsnappe din adgangskode (uanset hvor svær den er) eller den cookie, som WordPress bruger til at identificere dig med. Derefter kan de udgive sig som dig – det kan sammenlignes med udnyttelse af dit CPR-nummer. Log derfor kun på fra private netværk, hvis brugere du stoler på.

Bemærk: at de næste sikkerhedsforslag kræver teknisk viden og kan ved forkert opsætning forhindre al adgang til din WordPress-installation. Betal i stedet din udvikler for et par arbejdstimer, så det bliver gjort rigtigt.

Følgende forslag er lavet ud fra en typisk opsætning, så den egentlige konfiguration kan variere.

Begræns adgangen

Med teknisk viden kan man gøre det sværere for ubudne gæster at få adgang til ”følsomme” områder, såsom siden hvorfra man logger ind og hele kontrolpanelet. Derudover kan man ændre filrettighederne for WordPress-installationen:

Filrettigheder

Ved at begrænse skriverettigheder for filer og mapper gør man det sværere for ubudne gæster at udnytte sikkerhedshuller til at udskrive følsomme oplysninger eller ændre konfigurationer og filer. Normalvis har man én bruger (typisk en FTP bruger), som ejer filerne, mens selve webserveren har sin egen brugergruppe, som ligeledes har både skrive- og læserettigheder til filerne. Ved at fjerne nogle af webserverens rettigheder kan kun FTP-brugeren ændre filerne.
Alle filer bør som udgangspunkt have rettighederne 0644, mens alle mapper bør have 0755.

/
Rodmappen, hvori WordPress er installeret, kan med fordel begrænses så kun FTP-brugeren har skriverettigheder – på nær .htaccess-filen, som skal have (0664), hvis WordPress og plugins skal kunne lave ’rewrite rules’ – f.eks. pæne URL’er.

/wp-admin/
Alle filer bør kun have skriverettigheder af FTP-brugeren.

/wp-includes/
Alle filer bør kun have skriverettigheder af FTP-brugeren.

/wp-content/
Alle filer skal have skriverettigheder af FTP-brugeren og webserveren (0664).

/wp-content/plugins/
Alle filer bør kun have skriverettigheder af FTP-brugeren.

/wp-content/themes/
Hvis du bruger den indbyggede Editor, skal alle filer have skriverettigheder af FTP-brugeren og webserveren (0664), ellers kun af FTP-brugeren (0644) – det anbefales på det kraftigste at deaktivere editoren ( den der viser tema og plugin filer ) ved at indsætte denne linje øverst i wp-config.php-filen:

define(‘DISALLOW_FILE_EDIT’, true);

Luk ned for direkte adgang

Filerne i /wp-includes/ er ikke beregnet til, at besøgende skal have adgang til disse. Man kan derfor forhindre, at brugeren kan tilgå dem direkte ved at indsætte denne stump kode i .htaccess-filen i WordPress-rodmappen:

# 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>

Endvidere kan man flytte wp-config.php-filen ét niveau op, så den ligger uden for WordPress-mappen. Det har især sin fordel, hvis filen derved ligger uden for web-root mappen. Samtidig behøver den fil kun læserettigheder af FTP-brugeren og webserveren, så dens filrettigheder kan med fordel sættes til 0440. I de tilfælde hvor du har behov for at ændre konfigurationen, kan du midlertidigt ændre rettigheden til 0640, så FTP-brugeren har skriverettigheder.

IP-begrænsning

Arbejder du fra en fast IP, eller har du din egen VPN adgang, har du mulighed for at nægte al adgang til kontrolpanelet for alle besøgende, som ikke har din IP-adresse.

Det gøres ved at lave en .htaccess-fil indeni /wp-admin/ mappen med følgende indhold:

# Block access to wp-admin.
Order deny,allow
Allow from 1.2.3.4 # INDSÆT DIN IP-ADRESSE HER
Allow from 5.6.7.8 # DET ER MULIGT AT TILLADE FLERE FORSKELLIGE IP-ADRESSER
Deny from all

<Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

Den sidste del ovenfor er vigtig, hvis dit tema bruger AJAX-forespørgsler. Uden den lille stump kode vil alle AJAX-forespørgsler blive afvist.

HTTP Basic Authentication

Det er muligt at tilføje et ekstra sikkerhedslag til siden, hvorfra du logger ind: /wp-login.php.
Ved at tilføje denne stump kode til .htaccess-filen i WordPress rodmappen skal man indtaste korrekt brugernavn/adgangskode, før man overhovedet får adgang til login siden – altså en ekstra adgangskode.

# Protect wp-login
<Files wp-login.php>
    AuthType Basic
    AuthName "Administration"
    AuthUserFile /document_root/.htpasswd
    Require valid-user
</Files>

Du skal blot lave en .htpasswd-fil med ønsket brugernavn/adgangskode. Det gøres nemt med dette online værktøj: http://www.htaccesstools.com/htpasswd-generator/

Denne kodestump kan eventuelt kombineres med IP-begrænsningen, så man både skal kende adgangskoden og komme fra den rigtige IP-adresse for at få adgang.

Minimér skaden før uheldet er ude

Næste trin er at begrænse skaden, hvis ubudne skulle få adgang til WordPress-systemet. Det handler om at isolere WordPress fra eventuelle andre applikationer eller databaser, som afvikles fra samme webserver.

Hvis du bruger databasen til andre formål end kun WordPress, så overvej at oprette en database specifikt til WordPress. Skulle nogen få adgang til databasen, kan de kun pille ved den, og de andre data er derved mere sikre.

Har du root-adgang til webserveren, har du mulighed for at begrænse WordPress til kun at tilgå egne filer, f.eks. mappen /wordpress/. Har du filer og mapper uden for denne mappe, kan et inficeret script ikke få adgang til disse filer. Det gøres ved at opsætte ’open_basedir’ i din Apache-konfiguration, f.eks.:

<Directory /document_root/wordpress>
php_admin_value open_basedir = "/document_root/wordpress/;/tmp"
</Directory>

Herved får filerne kun adgang til sin egen mappe og tmp-mappen.
Det skulle også være muligt at opsætte dette i en .htaccess-fil selv uden root-adgang med denne linje (dette er dog ikke testet):

php_value open_basedir "/document_root/wordpress"

Jeg håber, at nogle af Martins råd hjælper dig til en sikrere WordPress-løsning og holder ubudne gæster ude. Husk på: At beskytte sit websted er en vedvarende proces, så hold dig altid opdateret på de nyeste tiltag inden for området.

Lars Bachmann

Iværksætter og Online nørd. Arbejder med WordPress og online markedsføring i min virksomhed Conseo.

Prøv lige at se disse indlæg også!

9 kommentarer til WordPress sikkerhed

  1. WordPress sikkerhed er bare så vigtigt! Jeg er blevet rigtig glad for plugin’et iThemes Security – har du nogen erfaringer med det? 🙂

  2. Hej Lars

    God guide. Virkelig set mange WP sites der er blevet hacket på det sidste.

  3. Casper Jensen siger:

    Godt med noget aktivitet på din blog igen, Lars!
    – WordPress sikkerhed, kan ALDRIG nævnes for meget. Super tips 🙂

  4. Kristoffer siger:

    Rigtig god guide! Jeg vil helt sikkert bruge nogle af disse triks på mine WP sider.

  5. Fedt Lars, sad lige og kiggede efter dette, og så fandt jeg det selvfølgelig hos dig 😀

  6. Kasper siger:

    Rigtig god og aktuel artikel. Man kan ikke få nok sikkerhed, men det godt nok også vigtigt at have en frisk backup liggende. Der findes flere plugins som kan lave ugentlige backups og uploade til eksempelvis Dropbox.

  7. Gode og interessante tips. Har flere WordPress installasjoner som tidligere har vært preget av angrep, så dette skal sees nærmere på.

  8. Det bedste råd er ikke at have et svært password (det er også et godt råd). Det er vigtigt IKKE at bruge standard loginbrugeren “admin” i WordPress. Vi vedligeholder og beskytter mange WordPress websites og vi kan se at mange af dem – flere gange om dagen – får fejlede loginforsøg med netop “admin” brugeren. Det er den ALLE wordpress installationer er født med, så hvis ikke man fjerner den, så ved de ondsindede hackere dit brugernavn – hvis man fjerner den bruger, skal de først til at gætte brugernavnet også. Noget andet der godt kan betale sig er at investere $50-$100 i at få geoblokering på. Hvis du har en hjemmeside som KUN er til danskere, så bloker alle andre lande (det er ikke 100% nøjagtigt – men så lav en landingsside til dem som bliver blokeret, hvor de kan kontakte dig via email).

  9. Det kan bare ikke understreges nok at wordpress OG plugins/themes skal opdateres så snart nye opdateringer kommer ud. Det er meget ofte at det er plugins der er målrettet. Problemet her er at mange wordpress pakker indeholder andre libs. som er gamle og som de ikke får opdateret ofte nok og så er der lige pludselig mange sider derude med gamle versioner uden at de ved det. Mange af de wordpress sider som jeg har vedligeholdt og som kunderne selv står for bliver ALDRIG opdateret.

Skriv et svar

Din e-mailadresse vil ikke blive offentliggjort. Krævede felter er markeret med *