J'ai un script PHP qui vérifie que l'utilisateur est connecté, pour chaque page qu'il accède dans un certain sous-répertoire. S'il est connecté, il obtient la page, sinon il est redirigé vers une page de connexion. Au lieu d'inclure cela dans tous les fichiers (pas possible car certains sont binaires), je .htaccess mis en place comme celui-ciAuthentification PHP + mod_rewrite
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^$
RewriteRule (.*) /check.php?filename=special/$1
Et le contenu de check.php sont
if (!isset($_SESSION['username']))
{
header("location: /login.html");
die();
}
$filename = $_GET['filename'];
include($filename);
Le problème est que l'enregistrement .php est vulnérable à l'inclusion de fichier local parce que je peux passer ../ dans le nom de fichier pour aller dans le répertoire parent et même quitter/var/www. Comment puis-je le restreindre à la seule lecture depuis le répertoire spécial, ou y a-t-il un moyen de le réécrire si la vérification PHP passe pour permettre à Apache de lire le fichier cible au lieu du script PHP lisant le fichier?
Modifier J'ai également des sous-répertoires dans le répertoire spécial. check.php se trouve dans le répertoire parent du répertoire spécial.
cela ne fonctionnera pas avec binaire. l'en-tête approprié est requis –
Oui, c'est un modèle simplifié de check.php. Je trouve aussi le type mime du fichier et envoie Content-Type dans l'en-tête. – Dmi