Discussion:
Redireccionar a pagina de error
(demasiado antiguo para responder)
Jose
2005-05-05 23:48:29 UTC
Permalink
Supongamos que tengo en PHP un código que comprueba si la contraseña
y el nombre son los correctos. De ser así entra en la sección privada
pero si no es así quiero mostrar la página de error del servidor.
Ahora supongamos que los errores del servidor (pongamos Apache) están
personalizados para que queden acorde al resto de la imagen
corporativa de la empresa.

La primera solución que se me ocurre es hacer un
Header(Location:.....) para redirigir y cargar la página de error
(Error.php?error=nºerror). Con esta solución el resultado visual es el
esperado. El usuario que falla se le muestra la misma ventana de error
que se le mostraría por parte del Apache si intentara acceder a una
sección "no accesible". El punto negativo es que en los logs del
Apache aparece entonces una entrada donde se ve claramente esta
redirección.
El objetivo es conseguir que en los logs no aparezca. Es decir, como
cuando se produce un intento de acceso a una carpeta protegida y el
Apache genera, por ejemplo, un error 403. En este caso la página que
se le muestra al usuario es la personalizada para ese error (Apache
redirecciona de forma automática al encontrarse con este fallo) pero
en los logs no aparece en ningún momento que se le haya redireccionado
a lugar alguno. Simplemente una entrada con su petición y un 403 (en
este caso) indicando que no tuvo permiso.

¿Cómo puedo forzar con PHP para que el servidor web, en este caso
Apache, responda del mismo modo que en el que comento sin dejar rastro
extra en sus logs y mostrando la página de error personalizada que
tengo preparado para ese tipo de errores (prohibido)?.

La solución que me viene en mente es que cuando el usuario falle
hacer un header(location:...) a una zona "prohibida" intencionadamente
creada para hacer fallar al servidor y el automáticamente redirigiría
al error oportuno, pero de esta forma también tendría registrada la
redirección del header en sus logs y es lo que se pretende evitar.

Gracias por vuestra ayuda
Un cordial saludo
--- Jose
Iván Sánchez Ortega
2005-05-06 00:46:16 UTC
Permalink
Post by Jose
¿Cómo puedo forzar con PHP para que el servidor web, en este caso
Apache, responda del mismo modo que en el que comento sin dejar rastro
extra en sus logs y mostrando la página de error personalizada que
tengo preparado para ese tipo de errores (prohibido)?.
include.

- --
- ----------------------------------
Iván Sánchez Ortega -ivansanchez-arroba-escomposlinux-punto-org

http://acm.asoc.fi.upm.es/~mr/
MSN:***@hotmail.com
ICQ:72800842
Jabber:***@jabber.org
Oscar Garcia
2005-05-06 08:42:37 UTC
Permalink
Post by Jose
¿Cómo puedo forzar con PHP para que el servidor web, en este caso
Apache, responda del mismo modo que en el que comento sin dejar rastro
extra en sus logs y mostrando la página de error personalizada que
tengo preparado para ese tipo de errores (prohibido)?.
A parte del include que te recomienda Iván te recomiendo que:

1.- Dicho archivo tenga el mismo dueño (ower) que tu usuario FTP o al
menos permisos para leerlo (por si usas suphp).
2.- Antes de enviar el archivo de error envía la cabecera 401 con un:
header('HTTP/1.0 401 Unauthorized');

Suerte.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Jose
2005-05-06 10:25:32 UTC
Permalink
He probado lo siguiente...

---
Fichero a.php:
<?php
header('HTTP/1.1 403 Forbidden');
set_include_path ($path_a_la_carpeta_errores);
// Para que Error.php sepa de que error se trata
$_REQUEST["error"]='403';
include ('Error.php');
?>
---

Al cargar este código aparece el error 403 en los logs y la página de
error esperada. En el log del Apache se puede ver lo siguiente:

---
(primer intento de acceso)

127.0.0.1 - - [06/May/2005:12:02:10 +0200] "GET /Privado/a.php
HTTP/1.1" 403 2814
127.0.0.1 - - [06/May/2005:12:02:10 +0200] "GET /IMG/Logotipo.jpg
HTTP/1.1" 304 -
127.0.0.1 - - [06/May/2005:12:02:10 +0200] "GET /IMG/Fondo.jpg
HTTP/1.1" 304 -

(segundo intento de acceso)

127.0.0.1 - - [06/May/2005:12:20:11 +0200] "GET /Privado/a.php
HTTP/1.1" 403 2814
---

Supongo que en el primer acceso las líneas correspondientes al
Logotipo y al Fondo son informes que muestran la carga de las imágenes
existentes en la pag. de error personalizada (lo que no entiendo muy
bien es porque no aparecen en mi segundo intento mostrándose la pág.
perfectamente pero no las peticiones - y eso es EXACTAMENTE lo que
busco - ). Probablemente sea el funcionamiento normal y ahora tenga
que echar mano más de la configuración del Apache para que en esos
casos no registre las dos entradas "extra" que aparecen al generar el
error.

Muchas gracias a todos por vuestra ayuda.
--- Jose

-----
Post by Oscar Garcia
Post by Jose
¿Cómo puedo forzar con PHP para que el servidor web, en este caso
Apache, responda del mismo modo que en el que comento sin dejar rastro
extra en sus logs y mostrando la página de error personalizada que
tengo preparado para ese tipo de errores (prohibido)?.
1.- Dicho archivo tenga el mismo dueño (ower) que tu usuario FTP o al
menos permisos para leerlo (por si usas suphp).
header('HTTP/1.0 401 Unauthorized');
Suerte.
Continúe leyendo en narkive:
Loading...