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.


, , ,

15 reacties op “Beveilig je WordPress website met .htaccess”

  1. order deny,allow
    deny from all
    allow from http://tpswebdesign.nl/

    Ik zoek zo soort code op er voor te zorgen dat de website voor niemand toegankelijk is maar alleen als iemand op een button klikt op een andere website,

    Bijvoorbeeld ik ben op website A en klik daar op een link of button en word dan door gelinkt naar website B.
    en als iemand anders de linkt van website B kopieer en plakt in hun browser dat ze er dan niet op kunnen komen.

    ik ben al lang bezig met uitzoeken hoe ik dit voor elkaar kan krijgen, en heb alles al geprobeerd behalve via het .htaccess bestand, en hoorde van iemand dat het via dat bestand met een code mogelijk zou moeten zijn

  2. 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.
    ?????????

    • Installeer de plugin Pike Firewall. Blokkeert proxy’s, VPN en Tor browser.
      Werkt prima.

      • Ik denk dat het blokkereren van proxy, VPN en Tor browser requests niet zo slim is. Zo blokkeer je ook legitieme gebruikers die iets om hun privacy geven. Dat kan niet de bedoeling zijn.

  3. 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

  4. 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.

  5. 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.

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

  7. Dit zijn zeker goede tips. De plugin kende ik reeds, maar de wijzigingen in de htaccess had ik nog nimmer doorgevoerd. Stanks.

  8. 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?

    • Ralph, ik gebruik zelf de bescherming voor htaccess, wp-config.php en de script injectie regels. Tevens gebruik ik een goed wachtwoord en de Login Lockdown plugin.