Wanneer je een website bouwt, wil je dat deze 100% veilig is, zeker wanneer het gaat om een webapplicatie. Je wil bezoekers zo veel mogelijk mogelijkheden bieden, maar toch de gevoelige bestanden goed afschermen. Eén van de stappen die je kan ondernemen om bestanden af te schermen van kwaadaardige bezoekers, is door ze buiten de www map te plaatsen op de server. Hierdoor kunnen bezoekers deze niet rechtstreeks aanspreken, maar kan je applicatie er wel aan. Ik heb enkele applicaties online staan waarvan slechts enkele bestanden in de www map staan.
Is het mogelijk voor mij?
Er is één grote voorwaarde opdat je CodeIgniter kan installeren buiten deze map. De host die je je webruimte aanbied, moet jouw de juiste rechten geven zodat je bestanden kan uploaden boven de www map. Bij mijn vorige host, One.com, kon dit niet. Daarom ben ik ongeveer een jaar geleden verhuist naar een host die dat wel ondersteunt, Futureweb.be. De www map waarover ik steeds spreek, kan ook onder een andere naam voorkomen, bijvoorbeeld public_html of wwwroot.
CodeIgniter installeren
Het installeren van CodeIgniter is super makkelijk. Het enige dat je moet doen is de laatste versie van het framework downloaden van codeigniter.com en het pakket uitpakken. Wanneer dat gebeurd is kan je gewoon de system map en het index.php bestand uploaden naar je webhost.
Normaal gezien upload je deze bestanden naar één en dezelfde map op de server, maar indien je CodeIgniter buiten de www map wil installeren, is dit lichtjes anders. Het index.php moet je uploaden naar de www map, of een submap hiervan. Het komt er op neer dat het index.php bestand bereikbaar moet zijn voor bezoekers. Dit is het punt vanwaar de bezoekers de applicatie gebruiken, de voordeur zeg maar.
De system map moet je buiten de www map plaatsen. Bezoekers krijgen toegang tot deze bestanden via het index.php bestand, maar kunnen niet rechtstreeks bestanden in de system map aanroepen. Om even terug te komen op het huis waarvan ik de voordeur al vernoemde, mensen kunnen via de voordeur naar de keuken, maar kunnen niet meteen de koelkast komen plunderen.
Je kan best ook de naam van de system map wijzigen. Dit maakt de applicatie niet veiliger (want bezoekers kunnen er toch niet aan), maar zorgt er wel voor dat je zelf de structuur beter kan zien. Ik geef de system map altijd de naam van de applicatie die ik zal maken, maar je verzint wel iets creatief. Zo heb ik de system map van degrillmobiel.be simpelweg ‘grill’ genoemd.
Het index.php bestand aanpassen
Wanneer je nu echter een bezoekje brengt aan het index.php bestand met je favoriete browser, zal het geheel niet werken. Dit komt omdat de verwijzingen in het bestand nog niet juist zijn. In het index.php bestand staat de volgende lijn code (regel 26):
$system_folder = "system";
Dit is de locatie waar CodeIgniter gaat zoeken naar alle bestanden. Wanneer index.php bestand staat op www.host.com/submap/index.php zal CodeIgniter zoeken naar www.host.com/submap/system/ en deze niet vinden. Wanneer je het index.php bestand los in de www map hebt staan, moet je de regel als volgt aanpassen:
$system_folder = "../system";
Per submap moet je vooraan nog een extra ‘../’ toevoegen. Indien je index.php bestand dus te bereiken is op www.host.com/submap/index.php moet de $system_folder variabele ‘../../system’ zijn. Indien je de naam van de system map hebt gewijzigd, moet je hier natuurlijk ook rekening mee houden.
Enkele regels lager in het bestand staat nog een andere variabele, namelijk $application_folder. Je kan, net als de system map, ook de application map van naam veranderen. Dit is handig wanneer je meerdere applicaties op één CodeIgniter installatie wil draaien, maar daar kom ik in een latere blogpost nog uitgebreid op terug.
De gebruikelijke instellingen
Na het uploaden van CodeIgniter moet je natuurlijk nog wel de nodige instellingen aanpassen alvorens je een werkende website hebt. Het bestand dat je zeker moet aanpassen is config.php, te vinden in de map system/application/config/. In dit bestand moet je de volgende regel aanpassen:
$config['base_url'] = "http://example.com/";
In het voorbeeld waarbij onze site op www.host.com/submap/index.php staat, moet de regel als volgt veranderd worden:
$config['base_url'] = "http://www.host.com/submap/";
Werkt het?
Wanneer je nu een bezoekje brengt aan www.host.com/submap/ zou je de standaard pagina van CodeIgniter moeten te zien krijgen.
Voila, je hebt met succes CodeIgniter buiten de www map geïnstalleerd en afgeschermd van al die kwaadaardige gebruikers.
Er zijn nog enkele punten die beter kunnen. Zo kan je bijvoorbeeld met behulp van een .htaccess bestand makkelijk de /index.php/ uit de url halen. Dit ziet er niet alleen mooier uit, maar is ook beter vanuit een SEO (Search Engine Optimalisation) standpunt. In een latere blogpost kom ik hier zeker nog op terug.
Indien je na deze (heel uitgebreide) blogpost nog met vragen of problemen zit hoor ik het graag.


als ge toch in htacces zit te kloten om die index.php eruit te halen is het nie veel moeilijker om ervoor te zorgen da ge gewoon die system-map nie zo kunt aanspreken, moest het niet mogelijk zijn van ze buiten de www-folder te zetten…
Dat is inderdaad een goede oplossing als je geen toegang hebt hoger dan de www map. Ik had er zelfs nog niet aan gedacht
Als je werkt met een .htaccess bestand weet ik nog een voordeel tov het geheel buiten de www map te zetten. In een latere post (ivm automatische backups) kom ik hier zeker nog op terug.