A menos que haya cambiado la configuración, los datos de sesión de PHP se almacenan en una variación en su propio formato de serialización () en un directorio temporal, y no es fácil llegar a eso sin usar PHP.
desafortunadamente, parece querer la velocidad de los archivos estáticos servidos al tiempo que autoriza dinámicamente cada solicitud, que no son objetivos realmente compatibles. Puede comprimir al tener un script PHP súper ligero que luego usa mod_rewrite para reescribir las solicitudes a los archivos dentro de él, que pasa por cosas que están bien. Ejemplo 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";
}
}
en particular, ese script PHP se ejecuta para siempre, por lo que necesitará reiniciar apache si lo cambia, creo.
Todo esto no ha sido probado, pero esa es aproximadamente la dirección en la que creo que tendrías que ir.
Referencias
Si tenía una cookie en particular que puede esperar, puede probar su ausencia con mod_rewrite y dar un 403 Prohibido.
RewriteCond %{HTTP_COOKIE} !LoggedIn=true
RewriteRule .* - [F,L]
Pero, si alguien supiera que necesitaban un conjunto de cookies con "LoggedIn = true", entonces podrían evadir fácilmente su "protección".
Una sesión PHP es específica de PHP. Apache no tiene forma de usar ninguna información en una sesión PHP. Tendría que tener algún módulo de autenticación específicamente para hacer la verificación de la sesión.
Lo que he visto hacer a la mayoría de las personas es que un script PHP maneje la publicación del contenido estático en el sentido de que recibe la solicitud, verifica la sesión, lee el archivo y envía el contenido con la información MIME adecuada.
fuente
La solución convencional para ese problema es redirigir cada llamada en esa carpeta a un archivo php, que verifica los permisos del usuario, y luego lee el archivo y lo envía a la secuencia de salida o redirige al usuario a "sin permiso" sitio. Por ejemplo...
Otra forma complicada de proteger sus archivos es generar un token desde session_id y una sal estática (y opcionalmente desde la ruta del archivo estático), y verificarlo mediante el acceso al archivo. Por lo tanto, debe regenerar ese token en su archivo htaccess. No sé si es posible solo con .htaccess, o si tienes que usar php para eso. Encontré una solución similar aquí. Estoy 99% convencido de que el md5 no es una función de reescritura de mod incorporada.
fuente
RewriteMap
en unprg://…
recurso de script de shell que realiza todo el cifrado y verificación MD5 real. Necesito probar esto y asegurarme de que funcione en mi configuración, pero parece que debería funcionar con Apache + el módulo mod_rewrite.Mi plan para resolver este problema ahora es
Redireccionar la solicitud a PHP
Autentique al usuario en PHP (todos los demás métodos de autenticación pueden ser demasiado débiles o requieren escritura en archivos todo el tiempo)
Usa Apache's
mod_xsendfile
( docs , github )fuente
Sí a la autenticación básica si está utilizando mod_php. http://php.net/manual/en/features.http-auth.php
fuente