2011-07-05 7 views
5

En un programa PHP, ¿se pueden contar los redireccionamientos de encabezado() para finalizar el flujo del programa, o existe algún valor en, por ejemplo, seguirlos con un dado() para estar seguros? ¿Es posible para el usuario explotar el script de alguna manera renunciando a los redireccionamientos? Esta pregunta es crucial en un caso en el que el usuario es redirigido por no tener suficientes permisos de acceso y el siguiente código está destinado solo para aquellos que no fueron redireccionados.¿Se pueden contar los redireccionamientos del encabezado() para finalizar el flujo del programa?

+0

Debe usar exit() o morir después de su encabezado –

+0

Para obtener una lista de los encabezados que se han configurado actualmente, consulte ['headers_list()'] (http://php.net/manual/en/function.headers -list.php) – hakre

Respuesta

7

No, encabezado no finaliza la ejecución del programa. Debe terminarlo usted mismo con la salida o morir. Puede probar esto con algo como esto:

<?php 
file_put_contents('/tmp/test', '1'); 
header('Location: http://www.emilvikstrom.se/'); 
file_put_contents('/tmp/test', '2'); 
?> 

Comprobar el contenido de /tmp/test y usted encontrará que es 2.

También he intentado este script:

<?php 
header('Location: http://www.emilvikstrom.se/'); 
echo "Test\n"; 
?> 

junto con telnet para enviar una petición HTTP manual, con este resultado:

HTTP/1.1 302 Found 
Server: nginx/0.7.67 
Date: Tue, 05 Jul 2011 07:27:14 GMT 
Content-Type: text/html 
Connection: close 
X-Powered-By: PHP/5.3.3-7+squeeze1 
Location: http://www.emilvikstrom.se/ 
Vary: Accept-Encoding 
Content-Length: 5 

Test 

Como se ve, todo lo que se hace eco después de la El encabezado de ubicación aún se envía al navegador. De hecho, PHP no puede saber después de una llamada header si va a enviar más encabezados, o si las cosas que emite son importantes.

Cuestiones relacionadas