Eeey ik heb een vraagje,

Ik heb op mn site een paar php bestanden staan die bedoeld zijn op te includen in andere php scripts. Gebruikers mogen deze pagina's eigenlijk niet zien omreden van veiligheid. Nu hebben de meeste bestanden wel z'on naam die je niet makkelijk raad, maar voor de veiligheid zou ik graag deze bestanden willen beschermen, zodat mensen ze niet perongeluk opeens voor de neus hebben. Hoe kan ik dit doen? Het gaat om .inc bestanden. Kan ik iets in een .htaccess zetten?

BVD
<?php
$var = 'bla';
include 'pagina.php';
?>

pagina.php:

<?php
if(!isset($var))
{
echo 'deze pagina mag zo niet bekeken worden';
}
else
{
//voer gewoon uit
}
?>
Of zet de bestanden die niemand mag zien allemaal in 1 bepaalde map. Zorg dat er geen index.php in die map staat en zet dit in je .htaccess:

# eigen errordocument voor mappen waar niemand in mag
ErrorDocument 403 /forbidden.php

# alle mappen op slot zetten
Options -Indexes

Je moet dan nog wel zelf even een forbidden.php aanmaken met een meldingtekst er in.
PHP Newbie schreef op 22.09.2006 20:21
<?php
$var = 'bla';
include 'pagina.php';
?>

pagina.php:

<?php
if(!isset($var))
{
echo 'deze pagina mag zo niet bekeken worden';
}
else
{
//voer gewoon uit
}
?>
einde quote PHP Newbie(mag zn naam weleens wijzigen met zn 1998 posts :p )

Ja eigenlijk doe ik dit al wel veel. Ik gebruik daar de variabele $pad voor. Deze bevat de document_root aangezien de $_SERVER['DOCUMENT_ROOT'] van mn hoster een verkeerd pad geeft *grom!!!!!* Dan hebben ze vervolgens wel weer $_SERVER['X_DOCUMENT_ROOT'] verzonnen, maar jah, die kent mijn server weer niet, dus daar schiet ik ook weer nix mee op. Vandaar dat ik op de pagina's die de bezoeker mag zien altijd eerst de var $pad set, en deze [ge|mis]bruik ik dan weleens hiervoor. Om alle include bestanden in 1 map te plaatsen lijkt me niet z'on sucses, aangezien et nogal een behoorlijke site is. dan ben ik ban dat et beetje onoverzichtelijk word.

Ik heb zelf staan:

RewriteEngine on
RewriteRule .*\.(inc)$ http://www.mijndomein.nl/basis/error403.php [F]

Bij mij zelf werkt dat prima, maar bij mn hoster levert dat beetje vaage pagina op, namelijk een 302 error pagina "Found The document has moved". Beetje vaag. Daarom dacht ik Apache heeft misschien wel andere manieren. Iemand?

Edit: hmmm... die PHP code blokken in quotes werken niet erg :s
maak even een htaccessje aan waarin in je zet:

ErrorDocument 302 /verboden.php

Maak dan wel even een pagina verboden.php aan

OFFTOPIC:

POST NUMMER 1999!!!!!!!
Bovenaan elke pagina die alleen included mag worden:

<?php
if(strpos($_SERVER['REQUEST_URI'], basename(__FILE__))){
    die('Dit bestand werkt alleen als het word ingeladen. Dit bestand kan niet los worden geopend!');
}
?>

[edit]
Ik gebruik het zelf ook, werkt prima!
[/edit]
hierdoor wordt het wat lastiger andries, maar als ik dan op mijn site wil includen, moet ik gewoon net voor het includen even de $_SERVER['REQUEST_URI'] veranderen naar de juiste pagina
arie schreef op 22.09.2006 20:18
Het gaat om .inc bestanden.

Nooit .inc gebruiken maar bijvoorbeeld .inc.php dan gaan ze door de parser en kan niemand ze bekijken.
SanThe schreef op 22.09.2006 23:04
[quote=arie schreef op 22.09.2006 20:18]Het gaat om .inc bestanden.

Nooit .inc gebruiken maar bijvoorbeeld .inc.php dan gaan ze door de parser en kan niemand ze bekijken.[/quote]idd dat weet ik. Ik denk dat ik ze dus idd maar hernoem naar .inc.php en ga werken met een variabele controleren.

Je kan tuurlijk wel weer in de .htaccess zetten:
AddType application/x-httpd-php .inc
Maar ja... tis altijd beetje zoeken naar een methode die behalve werkt, ook nog beetje orderlijk in elkaar steekt.

OFFTOPIC:
ik zit hier ff de banner rechts hier telezen over 'safe_mode=off' dat had mn hoster ook, totdat ik vrolijk met opendir(), readdir() en readfile() 'bij de buren' ging kijken. ik de braafheid zelve heb daar tuurlijk net jes over gemailt, en toen hebben ze na 2 weken warempel de safe mode aangezet :p tja dat zijn de leuke dingen van het leven :)
@PHP Newbie:
Dat hoeft niet. Hij controleert puur of de requested url niet die is van het bestand.

Als jij betand.php included in index.php bijv. dan bevat requested url index.php, en komt hij door de check heen.

Echter als je bestand.php opvraagt, dan bevat de requested url bestand.php en komt hij niet door de check heen.

Hierbij ga ik er vanuit dat bestand.php dit bevat:
<?php
if(strpos($_SERVER['REQUEST_URI'], basename(__FILE__))){
die('Dit bestand werkt alleen als het word ingeladen. Dit bestand kan niet los worden geopend!');
}
?>

En index.php dit:
<?php
include("bestand.php");
?>

[edit]
Spelling...
[/edit]

Reageren