À moins que vous n'ayez modifié les paramètres, les données de session PHP sont stockées dans une variante de son propre format serialize () dans un répertoire temporaire, et il n'est pas facile d'y parvenir sans utiliser PHP lui-même.
malheureusement, vous semblez vouloir la vitesse des fichiers servis statiques tout en autorisant dynamiquement chaque requête, qui ne sont pas des objectifs vraiment compatibles. Vous pourriez compromettre en ayant un script PHP super léger que vous utilisez ensuite mod_rewrite pour réécrire les requêtes vers les fichiers qu'il contient, ce qui passe bien. Exemple super simple:
.htaccess:
RewriteEngine On
RewriteMap auth prg:auth.php
RewriteRule (.*) ${auth:$1}
auth.php:
#!/usr/bin/php
<?PHP
set_time_limit(0); # This program needs to run forever.
$stdin = fopen("php://stdin","r"); # Keeps reading from standard in
while (true) {
$line = trim(fgets($stdin));
if (isset($_SESSION['USER_LOGGED_IN'])) {
echo $line\n";
} else {
echo "authfailed.html\n";
}
}
notamment, ce script PHP fonctionne pour toujours, vous devrez donc redémarrer apache si vous le changez, je pense.
Tout cela n'a pas été testé, mais c'est à peu près la direction dans laquelle je pense que vous devriez aller.
Références:
Si vous aviez un cookie particulier auquel vous pouvez vous attendre, vous pouvez tester son absence avec mod_rewrite et donner un 403 Forbidden.
RewriteCond %{HTTP_COOKIE} !LoggedIn=true
RewriteRule .* - [F,L]
Mais, si quelqu'un savait qu'il avait besoin d'un cookie avec "LoggedIn = true", alors il pourrait facilement contourner votre "protection".
Une session PHP est spécifique à PHP. Apache n'a aucun moyen d'utiliser des informations dans une session PHP. Vous devriez avoir un module d'authentification spécifiquement pour faire la vérification de session.
Ce que j'ai vu la plupart des gens, c'est qu'un script PHP gère le service du contenu statique dans la mesure où il obtient la demande, vérifie la session, lit le fichier et envoie le contenu avec les informations MIME appropriées.
la source
La solution conventionnelle à ce problème consiste à rediriger chaque appel de ce dossier vers un fichier php, qui vérifie les autorisations de l'utilisateur, puis lit le fichier et l'envoie au flux de sortie ou redirige l'utilisateur vers la «absence d'autorisation». site. Par exemple...
Une autre façon délicate de vous protéger est de générer un jeton à partir de session_id et un sel statique (et optiquement à partir du chemin de fichier statique), et de le vérifier par l'accès au fichier. Vous devez donc régénérer ce jeton dans votre fichier htaccess. Je ne sais pas si c'est possible uniquement avec .htaccess, ou vous devez utiliser php pour cela. J'ai trouvé une solution similaire ici. Je suis convaincu à 99% que le md5 n'est pas une fonction de réécriture de mod intégrée.
la source
RewriteMap
pour uneprg://…
ressource de script shell qui effectue tout le cryptage et la vérification MD5 réels. Je dois tester cela et m'assurer qu'il fonctionne sur ma configuration, mais il semble que cela devrait fonctionner avec vanilla Apache + le module mod_rewrite.Mon plan pour résoudre ce problème est maintenant de
Rediriger la demande vers PHP
Authentifiez l'utilisateur en PHP (toutes les autres méthodes d'authentification sont peut-être trop faibles ou nécessitent d'écrire dans des fichiers tout le temps)
Utilisez Apache
mod_xsendfile
( docs , github )la source
Oui à Basic Auth si vous utilisez mod_php. http://php.net/manual/en/features.http-auth.php
la source