PHP - Validar datos dinámicos recibidos cliente

 
Vista:

Validar datos dinámicos recibidos cliente

Publicado por Cosmos (5 intervenciones) el 20/11/2020 19:45:54
Hola!

Como sabemos se debe validar los datos en el cliente y en el servidor.

Sin embargo la cosa se complica al validar valores dinámicos generados en el cliente, por ejemplo, un select con unos determinados valores generados según determinadas selecciones en cliente, podria ser esto:

1
2
3
4
5
6
<select name="datos">
    <option value="2">Texto</option>
    <option value="35">Texto</option>
    <option value="12">Texto</option>
    <option value="40">Texto</option>
</select>

Yo lo que suelo hacer para saber que el usuario no ha cambiado ningún valor de los option (mediante el inspector del navegador) además del valor le paso una especie de "token". Dicho "token" es el resultado de: sha1(id de sesion del cliente + valor select), por tanto queda así (son token inventados):

1
2
3
4
5
6
<select name="datos">
    <option value="2|token=4u95or09093e939oe0o">Texto</option>
    <option value="35|token=4u95or09ewr093e4e0o">Texto</option>
    <option value="12|token=3295or03493e9399ir0w">Texto</option>
    <option value="40|token=0995or09ol3e939r8iere">Texto</option>
</select>

¿Es correcto?, ¿Qué opináis?

Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.623
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Validar datos dinámicos recibidos cliente

Publicado por Alejandro (644 intervenciones) el 20/11/2020 23:56:40
Así como cambian el numero igual puede cambiar el token para que coincida.

Si esos option son dinámicos y surgen de una consulta
1
SELECT * FROM Options WHERE select=1

igual puedes realizar la misma consulta agregando al where el valor elegido por el usuario
1
SELECT * FROM Options WHERE select=1 AND value=$valorDelUsuario
Si no obtienes resultado es porque el option fue alterado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.764
Plata
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Validar datos dinámicos recibidos cliente

Publicado por Mauro (610 intervenciones) el 21/11/2020 13:27:31
No me queda claro de qué te estás protegiendo.

¿Podrías mostrar un ejemplo de cómo alguien podría abusar de tu dropdown si no usaras el token?

¿No alcanza con validar que el valor recibido está dentro del conjunto de los usados para generar el dropdown?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David
Val: 32
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Validar datos dinámicos recibidos cliente

Publicado por David (17 intervenciones) el 21/11/2020 16:12:25
Por ejemplo, después de que el usuario realice una serie de elecciones y cálculos varios, en php se genera dicho select con el token.

Si no realizará lo del token una vez enviado el select al servidor se debería realizar toda esa serie de cálculos en php de nuevo para validar y no sería muy práctico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.764
Plata
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Validar datos dinámicos recibidos cliente

Publicado por Mauro (610 intervenciones) el 21/11/2020 16:17:09
Ya veo... ¿y no puedes guardar el conjunto de valores aceptables en la sesión por ejemplo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de David
Val: 32
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Validar datos dinámicos recibidos cliente

Publicado por David (17 intervenciones) el 21/11/2020 16:46:27
En ocasiones podría valer si.

El tema de validar en el front y en el backend me resulta redundante pero es inevitable.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.764
Plata
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Validar datos dinámicos recibidos cliente

Publicado por Mauro (610 intervenciones) el 22/11/2020 02:01:25
Claro, hay que validar en ambos lados, pero lo que yo decía era guardar en la sesión los valores precisamente para evitar el doble cálculo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar