Ik probeer via een php script een bestand met gevoelige informatie buiten de root folder van een website te zetten. Van te voren weet ik echter niet precies of het script dat dit doet zelf in de root folder staat, of in een submap, of in een submap van een submap, enzovoort.

Ik moet dus een manier vinden om te bepalen wat de rootfolder van de website is, en daar één directory boven gaan zitten.

Als ik $_SERVER[ 'DOCUMENT_ROOT' ] gebruik krijg ik zoiets:

/home000/sub000/sc00000-AAAA/domeinnaam.nl

domeinnaam.nl is de naam van de map waar de website instaat. In dit geval is de naam van de map daarboven dus sc00000-AAAA, de map die ik moet hebben. Maar hoe specificeer ik dat in php?
Er moet inderdaad geschreven worden, de database gegevens worden via een form ingevoerd, gecontroleerd en als er verbinding gemaakt kan worden, worden ze opgeslagen in settings.php

Dat iemand het bestand in de browser aanroept lijkt me idd niet zo erg, want dat levert gewoon een wit scherm op. Maar ik weet niet of er andere manieren zijn om toch bij de code te komen.
Op zich maakt het niet zoveel uit, wat ik al zei, als ik het script wil installeren moet ik sowieso FTP toegang hebben om de bestanden te kunnen uploaden dus kan ik ook de rechten van de benodigde map veranderen... Maar het is dan idd wel prettig om het toch buiten de root folder te zetten, dus hou ik het maar zo.
Marlies Maalderink op 27/01/2017 17:35:57

Dat iemand het bestand in de browser aanroept lijkt me idd niet zo erg, want dat levert gewoon een wit scherm op.

Je kunt daarvoor in settings.php een controle opnemen op een constante die ergens anders wordt gedefinieerd, bijvoorbeeld in het PHP-bestand dat settings.php met include of require insluit:

<?php
if (!defined('CONSTANTE_UIT_ANDER_PHP_BESTAND')) {
    header('HTTP/1.1 404 Not Found');
    exit;
}
?>

Inclusief een 404-fout, zodat het voor buitenstaanders lijkt dat het bestand niet eens bestaat.

Een techniek die ik wel eens gebruik als ik niet kan schrijven buiten de webroot, is in .htaccess de toegang tot alle config.* weigeren — dus tot config.ini, config.php, config.inc, config.yml, enzovoort:

<Files "config.*">
  Deny from all
</Files>


Dank je Ward, dat is handige informatie.
Misschien een domme vraag, maar als je via .htaccess alle toegang weigert tot config.*, kun je het bestand dan nog wel includen in een ander bestand?
Marlies Maalderink op 28/01/2017 09:41:37

Misschien een domme vraag, maar als je via .htaccess alle toegang weigert tot config.*, kun je het bestand dan nog wel includen in een ander bestand?


Ja want includen gaat intern via de filesystem en niet via het http protocol.

Als een gebruiker een pagina (is gelijk aan een bestand) opvraagt via de webbrowser dan zal de webserver (bijv, apache) onder andere kijken naar de .htaccess bestanden en bepalen of de gebruiker deze pagina wel mag zien.
Maar als een php script gestart wordt door apache dan is dit een proces dat draait op de achtergrond van de webserver. Dit proces heeft vervolgens toegang tot alle bestanden waarvoor het gemachtigd is. Ik praat dan over de toegangsrechten van het filesystem. ,htaccess bestanden hebben daar niets mee te maken.
Duidelijk, dank voor de uitleg, ik kan weer verder :)

Reageren