WordPress beveiligen zonder security plugins

wordpress beveiligen

WordPress beveiligen kun je doen met behulp van plugins. Zo zijn er plugins voor beveiligingsvragen toevoegen aan je WordPress login scherm, plugins voor je WordPress login pagina verplaatsen of verbergen, en niet te vergeten WordPress firewall plugins om je site te beschermen tegen o.a. DDoS aanvallen en brute force aanvallen. Maar WordPress beveiligen is ook mogelijk zonder dit soort security plugins. In dit artikel leggen we uit hoe je je WordPress site beveiligen kunt door een aantal snippets aan je WordPress bestanden toe te voegen.

WordPress beveiligen, zonder de plugins

Voor je aan de slag gaat met het aanpassen van je WordPress bestanden willen we je nog even op het hart drukken om altijd eerst een volledige backup van je website te maken. Als je dan per ongeluk iets fout doet, kun je je website namelijk altijd weer herstellen.

Hosting en Webhosting bij Combell

#1. Bescherm je .htaccess bestand

Je .htaccess bestand is één van de belangrijkste WordPress bestanden. Met onderstaande snippet kun je dit bestand beveiligen.

# Protect .htaccess
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>

#2. Bescherm je wp-config.php bestand

Ook je wp-config.php bestand is heel belangrijk. Deze kun je beveiligen door onderstaande snippet in je .htaccess bestand te zetten.

# Protect wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>

#3. Bescherm je error_log bestand

Met deze snippet zorg je dat hackers geen toegang krijgen tot error logs.

# Protect error_log
<files error_log>
order allow,deny
deny from all
</files>

#4. Bescherm je WordPress website tegen SQL Injecties

Deze snippet biedt bescherming tegen SQL Injecties.

# Protect from SQL Injection
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]

#5. Voorkom dat anderen je foto’s hotlinken

WordPress beveiligen betekent ook je afbeeldingen beveiligen. Als anderen jouw afbeeldingen ‘hotlinken,’ krijgt jouw host extra veel dataverkeer. Dat is dus in feite diefstal van jouw bandbreedte! Om dit te voorkomen kun je onderstaande snippet gebruiken. Vergeet niet om de voorbeeld URL aan te passen.

# Disable hotlinking of images
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ – [NC,F,L]

#6. Beperk directe toegang tot de PHP bestanden van je plugins en thema’s

Deze snippet zorgt ervoor dat PHP bestanden niet direct toegankelijk zijn.

# Restrict Direct Access to Plugin and Theme PHP files
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]

#7. Beveilig het wp-includes directory

Hiermee kun je de wp-includes map beveiligen.

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

#8. Laat mensen niet door je directories browsen

Met deze snippet zorg je dat mensen niet in je mappenstructuur kunnen snuffelen.

# Disable directory browsing
Options All -Indexes

#9. Blokkeer WordPress XMLRPC verzoeken

Als je deze functie niet gebruikt, is het aan te raden het te blokkeren.

# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>

#10. Voeg je eigen firewall toe

Deze 6G firewall/blacklist is ontwikkeld door PerishablePress en biedt misschien nog wel betere bescherming dan de meeste WordPress security plugins.

# 6G FIREWALL/BLACKLIST
# @ https://perishablepress.com/6g/

# 6G:[QUERY STRINGS]
<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
 RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR]
 RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR]
 RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
 RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR]
 RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR]
 RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR]
 RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
 RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
 RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR]
 RewriteCond %{QUERY_STRING} (\'|\")(.*)(drop|insert|md5|select|union) [NC]
 RewriteRule .* - [F]
</IfModule>

# 6G:[REQUEST METHOD]
<IfModule mod_rewrite.c>
 RewriteCond %{REQUEST_METHOD} ^(connect|debug|move|put|trace|track) [NC]
 RewriteRule .* - [F]
</IfModule>

# 6G:[REFERRERS]
<IfModule mod_rewrite.c>
 RewriteCond %{HTTP_REFERER} ([a-z0-9]{2000,}) [NC,OR]
 RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC]
 RewriteRule .* - [F]
</IfModule>

# 6G:[REQUEST STRINGS]
<IfModule mod_alias.c>
 RedirectMatch 403 (?i)([a-z0-9]{2000,})
 RedirectMatch 403 (?i)(https?|ftp|php):/
 RedirectMatch 403 (?i)(base64_encode)(.*)(\()
 RedirectMatch 403 (?i)(=\\\'|=\\%27|/\\\'/?)\.
 RedirectMatch 403 (?i)/(\$(\&)?|\*|\"|\.|,|&|&amp;?)/?$
 RedirectMatch 403 (?i)(\{0\}|\(/\(|\.\.\.|\+\+\+|\\\"\\\")
 RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%|\\|\s|\{|\}|\[|\]|\|)
 RedirectMatch 403 (?i)/(=|\$&|_mm|cgi-|etc/passwd|muieblack)
 RedirectMatch 403 (?i)(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ)
 RedirectMatch 403 (?i)\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$
 RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php
</IfModule>

# 6G:[USER AGENTS]
<IfModule mod_setenvif.c>
 SetEnvIfNoCase User-Agent ([a-z0-9]{2000,}) bad_bot
 SetEnvIfNoCase User-Agent (archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) bad_bot

 # Apache < 2.3
 <IfModule !mod_authz_core.c>
 Order Allow,Deny
 Allow from all
 Deny from env=bad_bot
 </IfModule>

 # Apache >= 2.3
 <IfModule mod_authz_core.c>
 <RequireAll>
 Require all Granted
 Require not env bad_bot
 </RequireAll>
 </IfModule>
</IfModule>

# 6G:[BAD IPS]
<Limit GET HEAD OPTIONS POST PUT>
 Order Allow,Deny
 Allow from All
 # uncomment/edit/repeat next line to block IPs
 # Deny from 123.456.789
</Limit>
Korting op WordPress handleiding

3 reacties op “WordPress beveiligen zonder security plugins”

  1. Henk schreef:

    Beste,

    Bedankt voor deze informatie met betrekking tot het beveiligen van WordPress. Ik heb echter wel nog 3 vragen:

    1.) Zijn deze bovenstaande snippets nog up-to-date?

    2.) Kunnen deze snippets allemaal in het .htaccess bestand in /domains/website.nl/public_html geplaatst worden? Of moet bijv #7 in de wp-includes map geplaatst worden in een aparte .htaccess bestand?

    3.) Hoe kan ik zien of bovenstaande werkt? Kan ik dit testen?

    Sorry ben een beetje een n00b hierin!
    Alvast bedankt!

    Gr Henk

  2. Frank Hoek schreef:

    Fijne tips, maar in welk(e) bestand(en) moet ik deze snippets plaatsen?

Geef een reactie