Una empresa para la que estoy trabajando me pidió que tomara uno de sus sitios web y lo convirtiera en un subdominio de otro sitio web. Luego, me pidieron que extendiera el control de la sesión "conectado/desconectado" de su dominio principal a su subdominio.Controlador de regex de seguridad del sitio? (PHP)
Habiendo hecho esto, veo que hay problemas de control/administración. Debido a su gran cantidad de páginas individuales, y debido a su extensa estructura de directorios, es demasiado complicado para ellos agregar un fragmento de PHP a cada una de sus páginas para redireccionar en función del estado de sesión iniciada.
Aquí está mi solución ... por favor avísenme de cualquier problema o cualquier otra cosa que me ayude.
- voy a utilizar Mod_rewrite para redirigir todas las peticiones en el subdomin a una página específica (handler.php? Requested_url =).
Voy a hacer una sección de "El sitio permite/prohíbe las reglas" en su sitio web. Esta sección contendrá un cuadro de texto con las reglas de la siguiente manera:
+/weather/ ---> will allow anyone access to any url that contains "/weather/" somewhere within it, irregardless of logged-in status. -/weather/premium/ ---> will only allow access to a url that contains /weather/premium to logged-in users.
Esta es la salida de una matriz almacenada en un archivo rules.php que se vería así:
$ruleList = array(); $ruleList[] = '+/weather/'; $ruleList[] = '-/weather/premium/';
En manejador .php, Si el usuario está conectado, los reenviaré al requested.url. Si el usuario no está conectado, entonces comenzaré suponiendo que cada página está restringida a usuarios que no han iniciado sesión. handler.php analizará el requested_url y compruébalo contra rules.php, para ver si hay algún permiso explícito establecido. Entonces, si la regla permite el acceso no registrado, enviará al usuario al requested_url, de lo contrario, lo enviará a la página de inicio de sesión.
Un problema que puedo ver de inmediato, es que dado que la regla Mod_rewrite
enviará a cada petición handler.php, ¿cómo puedo evitar un bucle infinito?
¿La redirección debe hacerse por algún método que no sea header("Location: ")
?
Editar: Aquí es una actualización de mi lucha:
Dentro de la .htaccess archivo del dominio superior (example.com) añadí:
#Prevent catching requests for the sub1 subdomain
RewriteCond %{REQUEST_URI} ^sub1\.example\.com
RewriteRule .* – [L]
Entonces , dentro del .htaccess para el subdominio sub1.example.com, agregué lo siguiente:
IndexIgnore *
RewriteEngine On
RewriteBase /path/to/base
#Avoid infinite loop on outgoing requests
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{HTTP_REFERER} !^/?handler.php?$
RewriteCond %{REQUEST_URI} !^/?handler.php?$
#Check for cookie. Redirect to handler if not found. (not yet implemented)
#RewriteCond %{HTTP_COOKIE} !session_id
RewriteRule (.*)$ handler.php?requested_url=$1 [NC,L,QSA]
Aquí es manejador.php
<?php
$url = $_REQUEST['requested_url'];
//Check list of permissions. For now just assume permitted.
$permitted = true;
if ($url == "") $url = "http://sub1.example.com";
if ($permitted)
header("Location: ".$url);
header("Location: http://sub1.example.com");
?>
estoy tan cerca que puedo saborearlo. Lamentablemente, por el momento estoy obteniendo un "bucle de redireccionamiento" en casi todas partes. Si alguien pudiera darme un empujón en la dirección correcta, ¡lo agradecería!
también verifique esto http://www.ibm.com/developerworks/opensource/library/os-php-secure-apps/index.html –
En cuanto a "agregar un fragmento a cada página demasiado involucrada", ¿lo hizo? considere [auto_prepend_file] (http://php.net/manual/en/ini.core.php#ini.auto-prepend-file)? – Leigh
Bueno, por lo que entiendo su configuración, solo debería obtener infinitos bucles de redirección si la página de inicio de sesión está clasificada como acceso restringido, ¿verdad? Entonces, ¿tu parte de análisis de reglas y URL hace algo inesperado? –