Redirecciones en PHP

Muchos alguna vez hemos utilizado el siguiente código para la redirección de páginas

php:
<?php

$return = '/';
if ( ! empty($_GET['return']) )
        $return = $_GET['return'];
elseif ( ! empty($_SERVER['HTTP_REFERER']) )
        $return = $_SERVER['HTTP_REFERER'];

header('Location: ' . $return);
exit();

?>

¿Cuál es el error que existe en el código mostrado?

15 Replies to “Redirecciones en PHP”

  1. YO lo llamaria horror

    no es $_SERVER['HTTP_REFERRER'] es $_SERVER[''HTTP_REFERER']

    y segundo creo ke toda con dicion de elseif deve ser asi

    if
    elseif
    else

    no

    if
    elseif

    bueno en los manuales siempre veo que asi

  2. LOL, no me dí cuenta del detalle, ya lo he corregido; pero todavía existe el error al que hace alusión el post 🙂

    En cuanto al uso de condicionales, no tiene nada que ver.

  3. Yo creo que el error esta en que estas permitiendo redireccionar a un sitio indicado por una variable pasada por GET. Si se trata de un usuario comun no pasa nada, pero si es otro mas "curioso" podria acceder a algun directorio que no nos convenga pasando por GET algo como /../../ etc.. , no?

  4. Me sumo a la propuesta de error de Federico, y aún diría más: lo mismo pasa con HTTP_REFERER. También puede ser manipulada esa variable modificando las cabeceras HTTTP de la petición.
    Así que habría que comprobar ambas variables: "return" como indica Federico, y el REFERER.

  5. No creo que importe mucho que modifiques el referer o la variable get para que sea ../../etc/secreto, ya que Location solo indica al navegador a donde ir. Este volvera a hacer la petición al nuevo sitio que será denegada por el servidor web.

    Tal vez sea cambiar el empty() por defined().

  6. Efectivamente joserra, el código mostrado es vulnerable a ataques XSS, esto se evidencia cuando return recibe un valor como:

    javascript:

    Content-Type:html

    <script>alert("XSS")</script>

    Para poder enviar el texto de arriba, simplemente habría que codificar la URL para que finalmente tenga este aspecto:

    code:

    %0AContent-Type:html%0A%0A%3Cscript%3Ealert(%22XSS%22)%3C/script%3E
  7. hola alguien me podria decir como le hago para que una vez que desplegue un reporte en php de una base de datos oracle pueda pasar esa tabla(reporte) a una pagina html?
    ojala me puedan ayudar o decirme en donde puedo encontrar algo parecido
    gracias

  8. estoy desesperado no se como puedo hacer reportes con postgres, necesito con urgencia un manual o ejemplos ya hecho, solo quiero que el reporte se muestre, no se como hacerlo soy nuevo en esto si me pueden ayudar les dejo mi e-mail, richard_1714 hot

  9. Ana y Richard...
    Si no sois capaces de daros cuenta de que el tema en esta página no tiene nada que ver con lo que estais pidiendo, y si no sois capaces de buscar información por vuestra cuenta (google?), ¿cómo pretendéis que la gente pierda el tiempo en contestaros?

  10. Probando el QUIZ, me di cuenta que (al menos en mi versión de php) no funciona el XSS.

    La función header lanza la siguiente advertencia:

    Warning: Header may not contain more than a single header, new line detected.

    Saludos!

Comments are closed.