Foros del Web » Programando para Internet » PHP »

$_SERVER: PHP_SELF vs. REQUEST_URI

Estas en el tema de $_SERVER: PHP_SELF vs. REQUEST_URI en el foro de PHP en Foros del Web. Hola: Estoy intentando implementar un sistema de seguridad con códigos distintos para cada página, y para ello estaba guardando la página actual con PHP_SELF, para ...
  #1 (permalink)  
Antiguo 16/09/2013, 03:38
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.603
Antigüedad: 18 años, 1 mes
Puntos: 1283
$_SERVER: PHP_SELF vs. REQUEST_URI

Hola:

Estoy intentando implementar un sistema de seguridad con códigos distintos para cada página, y para ello estaba guardando la página actual con PHP_SELF, para desde la página de control chequear el código original comprobando que la página desde donde viene sea igual al HTTP_REFERER del server..., y de esa manera también direccionar para volver a la página desde donde se envió el formulario...

Resulta que controlando la variable $_SERVER, el elemento que me vale es REQUEST_URI ya que desde una url terminada en "/" el PHP_SELF también añade el "index.php", y no coincide con el HTTP_REFERER.

¿Creen que es válido y seguro?

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #2 (permalink)  
Antiguo 16/09/2013, 08:17
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 12 años, 10 meses
Puntos: 194
Respuesta: $_SERVER: PHP_SELF vs. REQUEST_URI

Que bueno ver que aun quedan preguntas interesantes.

Con esto te evitarías request de lugares no deseados, aunque yo preferiría hacer una petición asincrónica que lo resuelva sin tener que redirigir dos veces como mencionas. En resumen, la idea que propones parece viable, siempre y cuando nadie te modifique las cabeceras del request (cosa que dudo mucho)

Saludos
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #3 (permalink)  
Antiguo 18/09/2013, 04:42
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.603
Antigüedad: 18 años, 1 mes
Puntos: 1283
Respuesta: $_SERVER: PHP_SELF vs. REQUEST_URI

Hola:

No entiendo eso de redirigir dos veces... La redirección sería con un meta redirect y un enlace.

Lo que me resulta incómodo es tener que poner o quitar el protocolo a mano...

La idea es considerar la página con:

// $p = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$p = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];

y en el control:

//$p = $_SERVER["HTTP_REFERER"];
$p = str_replace("http://", "", $_SERVER["HTTP_REFERER"]);

No sé si habrá forna de obtener el protocolo, y evitar usar cadenas "literales".

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 18/09/2013, 07:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 12 años, 1 mes
Puntos: 2534
Respuesta: $_SERVER: PHP_SELF vs. REQUEST_URI

Sí hay forma de obtener el protocolo, inspecciona con var_dump() toda la variable $_SERVER y verás que ahí viene.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 18/09/2013, 08:39
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.603
Antigüedad: 18 años, 1 mes
Puntos: 1283
Respuesta: $_SERVER: PHP_SELF vs. REQUEST_URI

Hola:

Supongo que te refieres a "SERVER_PROTOCOL"... en vez de usar var_dump he usad print_r... supongo que es lo mismo y por lo visto el resultado es muy parecido... pero la respuesta es PHP/1.1 en los dos sitios que he visto (uno de ellos es localhost)

Lo que no he visto es la cadena que se muestra en la url "http://", y aunque no uso el protocolo https, no sé como podría discriminarlo... (tampoco tengo información sobre otros protocolos, que seguramente existan)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 18/09/2013, 09:07
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 12 años, 1 mes
Puntos: 2534
Respuesta: $_SERVER: PHP_SELF vs. REQUEST_URI

De hecho hay un índice que se llama HTTPS, mira:
Cita:
'HTTPS'
Ofrece un valor no vacío si el script es pedido mediante el protocolo HTTPS.

Nota: Tenga en cuenta que si se emplea ISAPI con IIS el valor será off si la petición no se ha realizado a través del protocolo HTTPS.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 19/09/2013, 09:44
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.603
Antigüedad: 18 años, 1 mes
Puntos: 1283
Respuesta: $_SERVER: PHP_SELF vs. REQUEST_URI

Hola:

Cita:
Iniciado por pateketrueke Ver Mensaje
De hecho hay un índice que se llama HTTPS, mira:
No sé si será por la configuración php o apache, en ninguna de mis pruebas aparece ese índice. De todos modos, gracias.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 19/09/2013, 09:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 12 años, 1 mes
Puntos: 2534
Respuesta: $_SERVER: PHP_SELF vs. REQUEST_URI

Dicho índice sólo existe si accedes a tu site desde https me parece, si no, pues no.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 19/09/2013, 11:49
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: $_SERVER: PHP_SELF vs. REQUEST_URI

voy a intentar ayudar un poquito , podrias implementar un token que hara algo mas seguro la verificacion , te realize un ejemplo

un_archivo_cualquiera.php
Código PHP:
Ver original
  1.  
  2. $rand= rand(); // salt aleatorio pongo de ejemplo rand()
  3.  
  4. // funciona con las 2 cadenas
  5. $pagina = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
  6. // $p = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
  7.  
  8. // creamos el token , puedes generar el token como mas te guste yo puse este ejemplo
  9. // concatenamos el salt con la url y generamos un hash
  10. $hash = hash('whirlpool',$rand.$pagina);
  11.  
  12. // creamos la session para su postrior verificacion con el hash
  13. $_SESSION['TOKEN'] = $hash;
  14.  
  15. // creamos la session para guardar la url para su posterior verificacion
  16. $_SESSION['REFERER'] = $pagina;
  17.  
  18. // creamos la cookie para crear el hash en control y verificar
  19. setcookie('TOKEN',$rand);

control.php

Código PHP:
Ver original
  1.  
  2. // capturamos la url de donde vino
  3. $url = $_SERVER["HTTP_REFERER"];
  4. // $p = str_replace("http://", "", $_SERVER["HTTP_REFERER"]);
  5.  
  6. // comprobamos que existan todas las variables
  7. if(isset($_SESSION['TOKEN']) and isset($_SESSION['REFERER']) and isset($_COOKIE['TOKEN']))
  8. {
  9.     // creamos el hash
  10.     $hash = hash('whirlpool',$_COOKIE['TOKEN'].$url);
  11.  
  12.     // verificamos ambos hash y ambos referer
  13.     if($_SESSION['TOKEN'] === $hash and $_SESSION['REFERER'] === $url)
  14.     {
  15.  
  16.         // continuamos
  17.         echo 'correcto';
  18.     }
  19. }
  20.  
  21. // eliminamos los datos
  22. unset($_COOKIE['TOKEN'],$_SESSION['TOKEN'],$_SESSION['REFERER']);

ay puntos que debes de reforzar tan solo es un ejemplo , por ejemplo los nombres que no sean tan comunes y la cookie intentar mandarlo codificada o encriptada estaria muy bien, un buen salt aleatorio ,un buen hashing etc...

saludos

Etiquetas: formulario, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:09.