Beveilig je WordPress website met .htaccess

Lock

WordPress is op dit moment met 54,7 procent marktaandeel het meest populaire CMS op internet en 17,2% van alle websites draait op WordPress. (bron)


Deze populariteit van WordPress heeft zo z’n voor- en nadelen. Een groot voordeel is de grote community die werkt met WordPress, die zorgt voor het constant bijwerken van plugins, thema’s en de WordPress core zelf. Een nadeel is dat door de grote hoeveelheid WordPress websites, het voor hackers aantrekkelijk wordt om WordPress als platform aan te gaan vallen.

Aan ons (gebruikers van WordPress) dus de taak om er voor te zorgen dat onze website goed beveiligd is. Dit begint natuurlijk met een slimme gebruikersnaam en een nog slimmer wachtwoord., maar ook met extra regels aan je .htaccess bestand kan je veel mogelijke ingangen afsluiten.

Standaard .htaccess

Het standaard .htaccess bestand van WordPress bevat de volgende code:


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

We gaan eens kijken wat we zoal in dit bestand kunnen toevoegen. Extra regels voegen we toe na de # END WordPress regel. Let op, maak voordat je aan de slag gaat eerst een kopie van je .htaccess voor in het geval er iets mis gaat.

Bescherm je .htaccess

Als eerste gaan we zorgen dat niemand toegang heeft tot het .htaccess bestand.


<Files .htaccess>
order allow,deny
deny from all
</Files>

Alleen toegang vanaf je eigen ip adres(sen)

Om er voor te zorgen dat er de wp-admin map alleen toegankelijk is vanaf je eigen ip adres(sen) voeg je de volgende code toe aan een .htaccess bestand in de wp-admin map. De xxx.xxx.xxx.xxx vervangen we door ons eigen ip adres. Als je meerdere ip adressen wilt toevoegen dan kan je ze achter elkaar invoeren gescheiden door een spatie.


<Limit GET POST PUT>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Limit>

Bescherm je wp-config.php

Om toegang tot je wp-config.php (waar nogal eens FTP inloggegevens in staan) te ontzeggen, gebruik je onderstaande regels.


<Files wp-config.php>
order allow,deny
deny from all
</Files>

Meer bescherming

Voor bescherm tegen script injectie en modificatie van _REQUEST en GLOBALS gebruik je onderstaande regels:


Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

Plugins om WordPress te beveiligen

Mocht je plugins willen gebruiken om je WordPress installatie te beveiligen, dan kan ik je Login Lockdown aanraden om ip adressen te blokkeren waarvan herhaaldelijk login pogingen worden gedaan. Een andere plugin is WP Security Scan, waarmee je een aantal adviezen kan krijgen over te nemen veiligheidsmaatregelen.

Let wel: plugins zijn in mijn ogen geen goede oplossing om grootschalige brute force aanvallen af te weren. Als er vanaf vele IP adressen geprobeerd wordt om in te loggen en de plugins moeten dit allemaal verwerken, dan kan het allemaal te veel worden voor de webserver en betaat de kans dat je site niet meer bereikbaar is.

Mocht je nog meer vragen hebben, kom dan eens langs op het WordPress spreekuur.

nostromo is gebouwd op het Genesis Framework

Genesis Framework

Genesis geeft je de mogelijkheid om snel en makkelijk websites te realiseren met WordPress. Of je nu een beginner bent of een code-guru, Genesis geeft je een veilige en zoekmachine geoptimaliseerde basis welke WordPress verder brengt dan ooit bedacht. Het is zo simpel - Begin ook met Genesis!

Pak je voordeel met zes standaard lay-out opties, SEO instellingen, rotsvaste veiligheid, flexibele thema opties, handige widgets, een bak vol met hooks en een groot scala aan child-thema's om jouw site te maken zoals jij dat wilt. Met ondersteuning voor automatische thema updates is Genesis de slimme keuze voor jouw website of blog.

Reacties

  1. zegt

    Dank voor de geweldige tips.
    Kreeg de laatste tijd steeds meer aanvallen te verwerken en met die steeds wisselende ip-adressen krijgt de webserver toch een behoorlijke load te verwerken.
    Een en ander toegepast op de website bosschebabbels.nl die de laatste dagen veel hackpogingen te verwerken kreeg via wp-admin.
    Met plugins Limit-login-attempts en Security Protection werd tot nu toe alles tegen gehouden en de hacker probeert ook steeds met het niet bestaande admin in te loggen. Ik krijg steeds via mail een melding wanneer een inlog-attempts is mislukt. Dat zijn er heeeeeeeeel veel ieder uur.
    Ik dacht dat ik er na installatie van de ip-regels in .htaccess vanaf zou zijn, maar dat is dus vreemd genoeg niet het geval. Het werkt wel, want wanneer ik zelf via een ander ip-adres dan mijn eigen adres probeer in te loggen, krijg ik de mededeling dat toegang verboden is. De hacker echter kennelijk niet, want die kan nog steeds in het loginscherm met admin pogingen ondernemen met steeds weer een ander ip-nummer.
    Hoe kan dat nou? Ik heb samen met familie en vrienden nu al via 12 verschillende ip-adressen getracht het inlogscherm te bereiken, maar dat lukt niet. Zoals het hoort. Die ene hacker krijgt kennelijk wel een loginscherm voor zijn neus, want ik krijg steeds de mededeling dat er weer een ip-adres is geblokkeerd vanwege een inlogpoging met de foutieve credentials.
    ?????????

  2. zegt

    Ik heb een soort ‘datingsite’ voor reisgenoten en heb mijn wp-admin beveiligd met een .htaccess bestand. Nu moeten gebruikers een nieuw wachtwoord kunnen aanvragen als ze die kwijt zijn via wp-login.php maar de css daarvan staat in wp-admin dus ziet de pagina er niet uit. Kun je me ook vertellen hoe ik dat het beste kan oplossen?

    Groeten Albert

  3. Jan zegt

    Ik scherm het beheergedeelte van een cms vaak af met allow from ip. Eén van de beheerders heeft een nieuwe PC en nu komt ie er niet meer door ondanks het feit dat zijn ip adres hetzelfde is gebleven. Ik heb dit probleem één keer eerder meegemaakt maar kan er niets over vinden op het web. Dus het ip adres klopt 100% maar toch werkt allow niet.

  4. jeroen zegt

    order deny,allow
    allow from xxx.xxx.xxx.xxx
    deny from all

    Ik vind deze directory niet. Of moet ik eigen gegevens hier invullen.

    Hoor graag.
    De rest is wel gelukt.
    Ik krijg met deze php een 500 error.

  5. Jacco Haarsma zegt

    Goedenavond,
    Da’s een duidelijke uitleg.
    Kan ik de “injectie-regels” ook gebruiken bij Joomla?
    Met vriendelijke groet, Jacco

  6. Ralf zegt

    Zeer handige uitleg!
    Enige tijd geleden zijn 3 van mijn wordpress sites gehackt d.m.v. sql injectie. Ik ben toen met van alles bezig geweest om alle wordpress sites (ook de niet gehackte) te voorzien met een oplossing voor toekomstige hack pogingen. Wat gebruik je zelf als oplossing hiervoor als ik vragen mag?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

De volgende HTML-tags en -attributen zijn toegestaan: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>