Anuncia aquí

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?

Esta entrada fue publicada en PHP, Quiz

14 Comentarios

  1. 1 CalinSoft.net (10 de octubre de 2006, 10:42:21 pm) http://calinsoft.net

    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. 2 alex (10 de octubre de 2006, 10:47:23 pm) http://www.buayacorp.com

    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. 3 Federico (10 de octubre de 2006, 10:59:17 pm)

    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. 4 Joserra (11 de octubre de 2006, 01:15:08 am) http://najaraba.blogspot.com

    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. 5 mcosta (11 de octubre de 2006, 02:01:04 am)

    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. 6 Joserra (11 de octubre de 2006, 02:25:47 am) http://najaraba.blogspot.com

    mcosta, ¿pero quizás no podría ser objeto de un ataque de "cross-site scripting (XSS)"?

  7. 7 alex (11 de octubre de 2006, 07:52:11 am) http://www.buayacorp.com

    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

  8. 8 Joserra (11 de octubre de 2006, 08:49:10 am) http://najaraba.blogspot.com

    ¿cual es el premioooo? :P

  9. 9 alex (11 de octubre de 2006, 09:01:42 pm) http://www.buayacorp.com

    pronto talvez organizaremos algo :D

  10. 10 ana (23 de octubre de 2006, 03:07:54 pm)

    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

  11. 11 richard (25 de enero de 2007, 11:02:08 am)

    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

  12. 12 rafa (20 de marzo de 2007, 01:53:24 pm)

    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?

  13. 13 diegocaro (26 de junio de 2007, 11:26:36 pm) http://diego.bloog.cl

    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!

  14. 14 Eduardo (1 de diciembre de 2007, 02:00:03 am) http://www.henoi.com

    Todavia no entiendo como puede ser causado por el ataque

Un Trackback

  1. Por Problemas de seguridad en tus aplicaciones Web el 11 septiembre 2007 a las 5:20 pm

    [...] Redirecciones PHP [...]

Publicar un Comentario

Tu email nunca será publicado o compartido. Los campos requeridos están marcados con un *

*
*

Puedes usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>