Als aparte post mijn tips voor beveiliging van je website.
Een aantal hiervan staan in het .htaccess bestand.
1. Zorg dat de website en de uitbreidingen up-to-date zijn. Hierin zijn bekende bugs opgelost. De onbekende bugs helaas nog niet, dus een website is nooit 100% beveiligd.
2. Controleer bij je provider of je de laatste php versie gebruikt die zij aanbieden. Dit kun je bij sommige providers in het .htaccess bestand instellen.
3. Neem verschillende sterke wachtwoorden voor: control panel (provider), website beheer (cms), database user (cms), FTP user, en voor de mailbox die je website gebruikt.
4. Gebruik nergens "admin" of "beheerder" als gebruikersnaam!
5. Wijzig indien mogelijk de mapnaam van je cms backend.
6. Permissies van mappen maximaal 755, van bestanden 444, tenzij het echt niet anders kan. Als je toch schrijfbare bestanden moet gebruiken, probeer deze dan voor de buitenwereld af te schermen in het .htaccess bestand met een "deny from all".
7. Gebruik je een php/html website, blokkeer dan cgi,pl,py,txt bestanden.
Code:
# block access to cgi,perl,python,txt except robots.txt
<FilesMatch ".(cgi|pl|py|txt)">
Deny from all
</FilesMatch>
<FilesMatch robots.txt>
Allow from all
</FilesMatch>
8. Voorkom dat Perl bots een backdoor achterlaten om te hacken.
Code:
# block perl bots
SetEnvIfNoCase User-Agent libwww-perl bad_bots
order deny,allow
deny from env=bad_bots
9. Altijd een "Pagina niet gevonden" bestand in .htaccess opgeven
Code:
# Page not found
ErrorDocument 404 http://www.example.nl/404.php
10. Algemene beveiliging in het .htaccess bestand
Wijzig regel <Files "wp-config.php"> als je "config" bestand anders heet.
Code:
RewriteEngine On
# remove directory listing
Options -Indexes
# Deny access to your config
# Change wp-config.php in the name of your config file
<Files "wp-config.php">
order allow,deny
deny from all
</Files>
# IF the URI contains http:
RewriteCond %{QUERY_STRING} http\: [OR]
# OR if the URI contains [ or ]
RewriteCond %{QUERY_STRING} \[ [OR]
RewriteCond %{QUERY_STRING} \] [OR]
# OR if the URI contains <script>
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# OR if the script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# OR if any script is trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
# OR if the URI contains UNION
RewriteCond %{QUERY_STRING} UNION [OR]
# OR if the URI contains double slash
RewriteCond %{QUERY_STRING} // [OR]
# OR the request contains /proc/self/environ (LFI hack)
RewriteCond %{QUERY_STRING} proc\/self\/environ [OR]
# OR if the URI contains asterisk
RewriteCond %{QUERY_STRING} \*
# THEN deny the request 403
RewriteRule ^.*$ - [F,L]
# No advertising what you are running
ServerSignature Off
11. Zet in mappen die geen index.html of index.php hebben een dummy bestand met de naam index.html en als inhoud alleen de tekst <!--dummy-->
12. Als je een cms met gebruikersbeheer hebt, neem dan voor dagelijks gebruik een inlognaccount die minder permissies heeft dan het admin account.
13. Zorg dat bezoekers nooit bij een php bestand kunnen komen waarin de opdracht
phpinfo(); staat. Als je dit toch gebruikt, scherm het dan af in het .htaccess en .htpasswd bestand.