21 juli 2017
Webdesign & <? php /* CSS
Studies
 
 
 
 
 
PHP - Diverse Handleidingen Beveiligen van configuratiebestanden 18 juni 2009

Beveiligen van je configuratie bestand als je geen toegang hebt boven je www-root

Als je met een CMS systeem werkt is het altijd aan te raden je configuratie bestand boven de www-root te plaatsen. In dat configuratie bestand staan je gebruikersnaam en wachtwoord om verbinding te maken met je database. Onder de www-root verstaan we de publieke map waarin je je uiteindelijke website of cms bestanden zet. Als je met FTP inlogt op je webruimte bij je hostingprovider kom je meestal boven de root binnen en zie je meerdere mappen staan zoals bijvoorbeeld:

private
public

of

logs
www

of

mail
vdir
public_html

Je bevindt je dan BOVEN je www-root. IN de map public of www of public_html of htdocs, afhankelijk dus van hoe die map heet bij je provider plaats je je homapage bestanden. Soms komt het voor dat je zelfs nog een map dieper moet en dat bijvoorbeeld in public nog een map staat die je domeinnaam vertgenwoordigd bijvoorbeeld www.domeinnaam.nl en moet je nog IN die map gaan om je homepage in te plaatsten. In ieder geval, waar het om gaat is dat je vanwege veiligheidsoverwegingen altijd je configuratiebestand BOVEN je publieke map zet dus boven je www-root dus gewoon naast bovengenoemde mappen. Het idee is dat een hacker bestanden remote dus vanaf een andere server kan includen of openen en dan toegang zou hebben tot je database gebruikersnaam en wachtwoord.

Nu kan het echter voorkomen dat je bij sommige hostingproviders geen toegang hebt boven je www-root dus dat je geen bestanden mag plaatsen in de directory boven www. Als dat het geval is MOET je dus wel je configuratiebestand IN je www map zetten. Je hebt geen andere keus, maar dat brengt dan wel beveiligingsrisico's met zich mee en moet je dus extra beveiligingsmaatregelen nemen. Allereerst wel 2 opmerkingen als bovenstaande het geval is. Ten eerste: weet je wel zeker dat je niet boven je www-root kan komen ? Soms kom je met FTP gelijk IN je www-root map terecht. Probeer dan of je kan dubbelklikken (directory omhoog) boven je www map. Misschien kun je daar dus toch komen. Ten tweede: in mijn jaren dat ik al bij diverse hostingproviders websites beheer ben ik het praktsich nog niet tegen gekomen dat je niet 1 stap boven je www-map mag komen. Het is dus wel hoogst ongebruikelijk als dit niet kan. Mijn advies: zoek een andere hostingprovider of neem eerst nog is contact op met je hostingprivder om te vragen of je je niet vergist en of er niet een instelling gewijzigd kan worden zodat je toch 1 directory boven je root kan komen en daar schrijfrechten kan krijgen.

We gaan nu een aantal lagen van beveiliging opzetten zodat je toch je configuratie bestand IN de www map kan zetten en gebruiken als het echt niet anders kan. Dit heet in het Engels layered security, dus meerdere lagen van beveiliging.

Stap 1. Je configuratie bestand in een map plaatsen
Plaats je configuratie bestand IN een map en geef die map een vreemde wachtwoord achtige naam.

Stap 2. Configuratie bestand een andere naam geven
Geef ook het configuratie bestand zelf een andere vreemde wachtwoord achtige naam. De theorie is simpel. Waar je de naam niet van weet kun je ook niet hacken.

Stap 3. Zorg dat het bestand niet direct te benaderen is
Plaats de volgende code bovenin het config bestand:

if (stristr(htmlentities($_SERVER['PHP_SELF']), "config.php")) {
die();
}

Verander uiteraard config.php in bovenstaand voorbeeld in de nieuwe geheime naam van je configuratie bestand.

Stap 4. Zorg dat het bestand niet vanaf een ander/remote internet adres te benaderen is
Voeg daaronder de volgende code in het configuratie bestand:

if  ($_SERVER["HTTP_HOST"] != www.jouwwebsiteadres.nl) {
die();
}

Vervang www.jouwwebsiteadres.nl door je eigen website adres ZONDER http:// ervoor en ZONDER / erachter, dus precies zoals in het voorbeeld hierboven. Dit kan natuurlijk ook een subdomeinnaam zijn dus bijvoobeeld mijnsubdomein.websiteadres.nl.

Stap 5. Zorg dat er niet in de map gekeken kan worden
Plaats in de map een index bestand. Dit mag eindigen op .php of .html, dus index.php of index.html. ER hoeft verder niks in dat bestand te staan maar je kan er ook een redirect in plaatsen met:

<?php
Header("Location: ..");
die();
?>

Stap 6. Zorg dat de geheime map zelf ook beveiligd is
Met een .htaccess bestand ontzeg je volledig de toegang tot je geheime map. Maak een .htaccess bestand en zet daarin de volgende code:

deny from all

Informatie over het maken van een .htaccess bestand kun je hier lezen. 

Stap 7. Je relatieve include pad aanpassen
Configuratie bestanden moet je altijd relatief includen. Dit houdt in dat je het server pad naar het bestand gebruikt. Het relatieve pad vindt je bij _SERVER["SCRIPT_FILENAME"] als je even een phpinfo bestand maakt. Meer daarover lees je op http://www.dutchcms.nl/webdesign/vragen/phpvragen#21. Als je dit niet doet dan kan een hacker alsnog een ander bestand benaderen van je site waarin het configuratiebestand in ge-include wordt.

Je relatieve pad gaat er dan ongeveer als volgt uitzien:

/relatiefpad/wwwmap/geheimemap/geheimbestand.php

Uieraard moet je in bovenstaande voorbeeld relatiefpad vervangen door jouw relatieve pad en wwwmap door jouw wwwmapnaam en geheime namen door jouw geheime namen. Soms kan het totale pad dus een vrij lange regel worden. Let op dat je daarbij dus geen (schrijf)fouten maakt.

Tot zover deze handleiding. Voor eventuele vragen kun je terecht in het Forum.

Juni 2009
A. L. / Webdesign, PHP en HTML