50 votos

¿Por qué tengo que llamar ' salida ' después de la redirección a través de header('Location.. ¿') en PHP?

Sabe usted que si desea redirigir un usuario en PHP puede utilizar la función de cabecera:

header('Location: http://smowhere.com');

También es bien sabido que es una buena práctica poner también un exit; después de la header llamada, para evitar la ejecución de código php. ¿Mi pregunta es: puede el código después de la llamada cabecera ubicación efectivamente ejecutado? ¿En qué casos? ¿Un usuario malintencionado puede ignorar completamente el header('Location..') llamar? ¿Cómo?

55voto

Pekka 웃 Puntos 249607

podría el código después de la cabecera-ubicación de la llamada a ser efectivamente ejecutado?

Sí, siempre. El header es sólo una línea de datos pidiendo el navegador para redirigir. El resto de la página se servirán por PHP y puede ser visto por el cliente simplemente evitando la header comando de ejecución.

Que es bastante fácil de hacer con una línea de comandos de cliente como wget, por ejemplo, simplemente diciendo que no siga las redirecciones.

Línea de base: Si no prevenir, PHP enviará todo el cuerpo, incluso después de una header llamada. Que el cuerpo está totalmente disponible para el destinatario sin necesidad de tener habilidades de hacking.

25voto

Alix Axel Puntos 63455

Si redirecciona pero no die() / exit() el código siempre se ejecuta y muestra.

Tomemos el ejemplo siguiente:

admin.php:

if (authenticationFails)
{
    // redirect and don't die
}

// show admin stuff

Si no que poner fin a la ejecución después de que la ubicación cabecera cada usuario tendrá acceso.

8voto

Pascal MARTIN Puntos 195780

header() indica a PHP que un encabezado HTTP debe ser enviado... Cuando los encabezados HTTP que se envían.

Y los que no son enviados inmediatamente al escribir la llamada a header(), pero a la hora de enviar (normalmente, cuando PHP necesita para comenzar a enviar el cuerpo de la respuesta, que podría ser más tarde de lo que crees, cuando output_buffering es enabed).

Por lo tanto, si usted acaba de llamar header(), no es absolutamente ne garantía de que el código escrito después de esta instrucción no se ejecuta-a menos que usted indique que no debe, mediante el uso de exit/die.

El usuario puede omitir la Location de encabezado si él quiere ; pero no va a cambiar nada en el hecho de que el código después de la llamada de header() podría o no ser ejecutado : que la materia es del lado del servidor.

1voto

Alister Bulman Puntos 12913

Código PHP después de que se llevará a cabo un header(). A veces, se requiere sin embargo, como el ejemplo de muestra de php.net. Para asegurarse de que no es, terminas completamente el flujo del programa.

1voto

Steven smethurst Puntos 1335

re: podría el código después de la llamada cabecera ubicación efectivamente ejecutado?

Sí si no cierra la secuencia de comandos.

re: en que casos?

En cada caso.

Un usuario malintencionado puede ignorar totalmente la llamada de header('Location..')?

No, se consigue exija el usuario tiene nada que decir en la materia.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X