Foros del Web » Programando para Internet » PHP »

No dejar enviar datos a los archivos de mi web desde páginas externas

Estas en el tema de No dejar enviar datos a los archivos de mi web desde páginas externas en el foro de PHP en Foros del Web. Hola, en realidad este es un problema que se ha tratado anteriormente pero no me queda claro cual es la forma más segura. Había pensado ...
  #1 (permalink)  
Antiguo 05/09/2014, 06:45
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 6 años, 4 meses
Puntos: 5
No dejar enviar datos a los archivos de mi web desde páginas externas

Hola,

en realidad este es un problema que se ha tratado anteriormente pero no me queda claro cual es la forma más segura.

Había pensado en hacerlo de forma que las páginas con los formularios tengan un token que cambia cada vez que actualizas y compararlo con el que tenga en una cookie que estaría en MD5 para que no se sepan el de la sesión.

Bueno, me gustaría que contasen sus experiencias con sus webs u otros ejemplos que hayan visto y que les parezcan totalmente seguros.

¡Un saludo!
  #2 (permalink)  
Antiguo 05/09/2014, 07:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 4 meses
Puntos: 2534
Respuesta: No dejar enviar datos a los archivos de mi web desde páginas externas

Cita:
Había pensado en hacerlo de forma que las páginas con los formularios tengan un token que cambia cada vez que actualizas y compararlo con el que tenga en una cookie que estaría en MD5 para que no se sepan el de la sesión.
A esa técnica se le conoce como CSRF.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 05/09/2014, 13:03
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 6 años, 4 meses
Puntos: 5
Respuesta: No dejar enviar datos a los archivos de mi web desde páginas externas

Cita:
Iniciado por pateketrueke Ver Mensaje
A esa técnica se le conoce como CSRF.
Pero, ¿esa técnica CSRF tiene algún inconveniente?
  #4 (permalink)  
Antiguo 05/09/2014, 13:16
 
Fecha de Ingreso: febrero-2010
Ubicación: valencia
Mensajes: 129
Antigüedad: 9 años, 6 meses
Puntos: 3
Tienes que hacer tu web modular de esa manera guardas siempre esa clave en el header al loguearte
  #5 (permalink)  
Antiguo 05/09/2014, 15:52
josemiguelweb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No dejar enviar datos a los archivos de mi web desde páginas externas

Lo mas usual y recomendable es que apliques un filtro CSRF a tus formularios, esto lo puedes lograr generando un código token dinámico y encriptado el cual debes agregar a tu formulario para que sea enviado y luego de enviado validas que el código token este presente.

Saludos...
  #6 (permalink)  
Antiguo 09/09/2014, 10:14
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 6 años, 4 meses
Puntos: 5
Respuesta: No dejar enviar datos a los archivos de mi web desde páginas externas

La verdad es que no me gustaría dejar rastro en los formularios para que no se vea, ¿de la forma que he propuesto yo con las cookies y las sesiones que es un poco más discreto?
  #7 (permalink)  
Antiguo 10/09/2014, 02:58
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 6 años, 4 meses
Puntos: 5
Respuesta: No dejar enviar datos a los archivos de mi web desde páginas externas

Siento el doble post pero vengo a proponer algo y es el siguiente código que me he inventado:

Código PHP:
Ver original
  1. <?php
  2. if(isset($_SESSION["csrf"]) && isset($_COOKIE["csrf"])){
  3.      if(md5($_SESSION["csrf"]) == $_COOKIE["csrf"]){
  4.           unset($_SESSION["csrf"]);
  5.           setcookie("csrf", "", time() - 1);
  6.           $_SESSION["csrf"] = "xxxxx"; //Cada uno de los "x" será un rand(1, 9)
  7.           setcookie ("csrf", md5("xxxxx"), time() + 86400); //Cada uno de los "x" será un rand(1, 9)
  8.           //Pongo que la cookie dure un día, no creo que alguien esté 24h sin hacer ningún cambio y si lo está, le enviará a la página de error.
  9.      }else{
  10.           unset($_SESSION["csrf"]);
  11.           setcookie("csrf", "", time() - 1);
  12.           $_SESSION["csrf"] = "xxxxx";
  13.           setcookie("csrf", md5("xxxxx"), time() + 86400);
  14.           header("Location: error.php");
  15.      }
  16. }else{
  17.      unset($_SESSION["csrf"]);
  18.      setcookie("csrf", "", time() - 1);
  19.      $_SESSION["csrf"] = "xxxxx";
  20.      setcookie("csrf", md5("xxxxx"), time() + 86400);
  21.      header("Location: error.php");
  22. }

¿Este serviría y sería totalmente seguro?

Muchas gracias

Etiquetas: dejar, formulario
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 07:42.