2012-02-22 8 views
9

¿Qué tan seguros son los redireccionamientos de encabezado? Según tengo entendido, la información del encabezado instruye al navegador sobre qué hacer. Por lo tanto, si la ubicación del encabezado está configurada en otro lugar, ¿se puede hacer que el navegador llegue a la página inicial?¿Qué tan seguro es un redireccionamiento de encabezado? ¿Puede ser pasado por alto?

if(!$loggedin){ 
header('Location: someotherpage.php') 
} 

Si alguien, (tos tos) se olvidó de utilizar un comando de salida después de la cabecera, es posible que alguien todavía aterrizar en esa página?

+4

Usted puede encontrar https://addons.mozilla.org/en-US/firefox/addon/noredirect/ un complemento útil para Firefox. Esto te permitirá ver lo que realmente se envía. He visto sitios (que tengo permiso para probar) que permiten que todas las interfaces administrativas se puedan usar anónimamente, porque redirigen sin salir a la página de inicio de sesión. – Cheekysoft

+0

Gracias Cheekysoft. Eso es exactamente lo que estaba buscando. –

Respuesta

8

Si alguien, (tos de tos) se olvidó de usar un comando de salida después del encabezado, ¿alguien podría aterrizar en esa página?

Claro - en lugar de la tierra en esa página (que ya tiene), olvidando un exit() significa que el cliente todavía puede ver los datos emitidos después de esas líneas. Nadie puede forzar el cliente para salir inmediatamente después de recibir un encabezado Location:. Esa acción es completamente voluntaria.

0

Sí, definitivamente. Es por eso que un usuario debe seguir (o una salida) después de una redirección en el caso de que quiera evitar mostrar información ilegítima. Si uno utiliza una solicitud personalizada, puede ver fácilmente lo que sigue después de una solicitud de redireccionamiento, es un problema de seguridad bastante estándar.

0

Sí. Sería posible aterrizar en esa página, no puedes forzar 'Ubicación'. También es posible cargar "accidentalmente" el resto de la página si la página arroja errores de "encabezados ya enviados". Es una buena práctica usar exit; después de enviar un header('Location...').

función Ver PHP: headers_sent

Cuestiones relacionadas