Foros del Web » Programando para Internet » PHP »

¿ Seguridad para los campos ocultos de formularios ?

Estas en el tema de ¿ Seguridad para los campos ocultos de formularios ? en el foro de PHP en Foros del Web. Hola a todos los foreros, me gustaría saber vuestras opiniones a cerca de la seguridad en formularios. Ya se lo de la validación, etc.., lo ...
  #1 (permalink)  
Antiguo 13/03/2012, 03:29
 
Fecha de Ingreso: octubre-2003
Ubicación: España
Mensajes: 1.067
Antigüedad: 21 años, 1 mes
Puntos: 18
¿ Seguridad para los campos ocultos de formularios ?

Hola a todos los foreros,

me gustaría saber vuestras opiniones a cerca de la seguridad en formularios. Ya se lo de la validación, etc.., lo que me preocupa es que, por lo visto, el usuario puede modificar campos hidden. Os pongo un ejemplo:

Cuando un usuario se registra en la web, guardo su id en una variable de sesión. A partir de ahí, lo típico, puede añadir datos, modificarlos, etc.. El tema está en que a mi no me gusta a la hora de realizar operaciones de inserción/modificación y borrado de datos utilizar variables de sesión directamente, me explico:

Cuando un usuario cumplimenta un formulario y lo envia, le meto en un campo hidden el num de usuario para cuando la página reciba todos los datos de dicho formulario los reciba todos con $_POST y no tenga que utilizar ninguna variable de sesión. Esto lo realizo así por "motivos de seguridad", es decir, si el usuario con id 45 acaba de cumplimentar un formulario de XX campos, que a la hora de guardar sea realmente así (recogiendo los datos por POST) y no exista ninguna variable de sesión que pueda dejar la operación de insertado un poco "en el aire" mediante variables de sesión, no se si me explico...

Pero por lo que veo se puede modificar cualquier campo de un formulario (sea hidden o no), por tanto dicho usuario podría poner otro id del campo hidden y a la hora de guardar se guardaría como si fuera otro usuario... entonces.. ¿Que opinais? ¿Existe una forma mejor?

Gracias a todos !
  #2 (permalink)  
Antiguo 13/03/2012, 04:02
Avatar de efedefernan  
Fecha de Ingreso: diciembre-2007
Ubicación: Cantabria
Mensajes: 91
Antigüedad: 16 años, 10 meses
Puntos: 11
Respuesta: ¿ Seguridad para los campos ocultos de formularios ?

Creo que lo suyo es que uses la variable de sesion, ya que la controlas tú.
Imaginate que por un casualidad alguien en el campo hidden donde tu guardas el id del usuario, lo cambia con el firebug (por ejemplo) e introduce el id de otro usuario que tengas registrado en tu base de datos.
Posiblemente si no haces las oportunas comprobaciones estas dejando en manos del usuario el que los datos que introduzca vayan a parar a otro usuario.

NUNCA DEJES NADA EN MANOS DE UN TERCERO Y MENOS SI NO LO CONOCES.
  #3 (permalink)  
Antiguo 13/03/2012, 05:14
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 13 años, 3 meses
Puntos: 13
Respuesta: ¿ Seguridad para los campos ocultos de formularios ?

Hola, interesannte cuestion. a ver si te sirve esto

1º En el script receptor ten una lista de los campos del formulario de forma que, si hay campos extra o un campo no coincide con el valor que deberia, no procesas el formulario , te explico.

tienes un formulario con 4 campos (nombreReal, nombreUsuario, password, IdentificadorOculto) si por cualquier motivo no recibes exactamente esos 4 campos, no procesas y devuelves el formulario . evitando asi que se hayan manipulado o incluido campos.

2º Valida los datos recibidos. no permitas etiquetas HTML en ningun campo y utiliza o bien plantillas de consultas ("prepared statements") o funciones como mysql_real_scape_String() para evitar que te cuelen mas de un usuario.

3º Establece un identificador a tu formulario de forma que cuando recibas los datos primero compruebes que ha sido tu formulario el que lo ha enviado. hay tutoriales en internet sobre este tipo de tecnicas

4º en cuanto al campo oculto: PHP utiliza cookies para las sesiones. 1 cookie con la id de sesion del usuario se almacena en el navegador del usuario (esta id es generada automaticamente por php) y el resto de los datos de las variables de sesion se alamcenan en el servidor. por lo que los datos de las variables de sesion (array $_SESSION) no son accesibles desde el navegador y por lo tanto su contenido es mas complicado de modificar que el de un campo input.

Para asegurar el campo input puedes hacer una cosa. Puedes codificar el contenido del campo mediante una clave(10 caracteres o más y a ser posible, totalmente aleatorios) cuando lo dibujes en el formulario y deshacer la codificacion al llegar al script de destino(el que procesa el formulario) y compararlo con la variable de sesión que almacena el id para comprobar que es el mismo. De esta forma tambien puedes comprobar si es un ataque y no procesar el formulario o hacer creer al usuario que si lo has hecho y enviarlo a un honeypot , por ejemplo.
  #4 (permalink)  
Antiguo 13/03/2012, 05:39
 
Fecha de Ingreso: octubre-2003
Ubicación: España
Mensajes: 1.067
Antigüedad: 21 años, 1 mes
Puntos: 18
Respuesta: ¿ Seguridad para los campos ocultos de formularios ?

ok tomo nota

Lo de codificar el contenido, he leído mucho sobre codificarlo con base64 pero me parece que eso no es seguro, ¿ k tal os parece base64? ¿ alguna alternativa mejor ?

Salu2

;)
  #5 (permalink)  
Antiguo 13/03/2012, 06:16
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 13 años, 3 meses
Puntos: 13
Respuesta: ¿ Seguridad para los campos ocultos de formularios ?

La cuestion es que toda codificacion que pueda deshacerse es susceptible de ser deshecha. Pero todo es susceptible de ser hackeado, incluso las codificaciones sha1() son susceptibles de ser descubiertas por colisión aunque sea casi imposible hacerlo (pero un casi no es una certeza aunque se requeriria cierto nivel de hardware sólo para intentarlo).

Si lo prefieres utiliza sha1, pero en este caso la codificacion no puede deshacerse , solo puedes comprobar que el valor codificado que te llega es el mismo que el resultado de codificar el que tienes en la variable de sesion.

Aun así tienes que tener un nivel de seguridad acorde con la importancia de la informacion. Por ejemplo, en una pagina donde te solicitan email Nombre y pass. y en principio no hayu informacion demasiado delicada, no vas a poner trabas y trabas que hagan la aplicacion lenta . ¿Seria lo correcto? si, por supuesto, hacer la aplicacion lo mas segura seria lo correcto pero lamentablement si la pagina es lenta, el usuario se marcha asi que hay que compensar.
  #6 (permalink)  
Antiguo 30/03/2012, 01:59
 
Fecha de Ingreso: octubre-2003
Ubicación: España
Mensajes: 1.067
Antigüedad: 21 años, 1 mes
Puntos: 18
Respuesta: ¿ Seguridad para los campos ocultos de formularios ?

Está claro que los campos hidden no son seguros, son como cualquier otro campo y está claro que es muy recomendable validar los datos recibidos con php (ademas de javascript) ya que a través de firebug o similar se puede cambiar toda la web de arriba a bajo, por tanto, los datos enviados por el usuario nunca son de confianza...

En mis proyectos controlo XSS, sql injections etc.. pero en este post me querría centrar en las vulnerabilidades al pasar/recibir datos entre páginas con $_POST.

Pongo un ejemplo:

Un usuario se registra en la web y una vez en su panel de control puede ver un combobox con un listado de opciones a las que puede acceder (cada usuario tendrá un listado propio, según una serie de parametros). Entonces el usuario elige una opción y se envían los datos por $_POST. La pregunta es:

- ¿La página que recibe esta opción debería mirar en la base de datos para asegurarse que dicha opción elegida pertenece realmente a ese usuario?

- Si se realizan demasiadas consultas en la BD para comprobaciones no se sobrecarga demasiado el servidor con demasiadas consultas ?,

- ¿ es mejor utilizar $_SESSION ?

¿ Que opinais ?

Un saludo compañeros!

Etiquetas: campos, formulario, ocultos, seguridad, variables, usuarios
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 11:20.