¿Cómo evita que alguien cambie los valores ocultos en un formulario HTML?

2

Si tengo un formulario HTML y tiene entradas ocultas para los números de ID y similares (por lo que sé la clave de identificación de la tabla x para actualizar), ¿cómo puedo asegurarla para que la persona no pueda simplemente cambiarla? y arruinar las entradas de la base de datos?

Tengo una "ventana emergente" de arranque modal, por ejemplo, que adjunto entradas ocultas al formulario para que cuando envíe el formulario en el modal, las claves de la base de datos correctas se envíen y procesen.

Alguien puede cambiar eso fácilmente (sin mencionar la edición del encabezado y el reenvío). ¿Que puedo hacer? El sitio está protegido con nombre de usuario y contraseña, pero aparte de eso no estoy seguro de qué hacer. No estoy tan preocupado por la inyección de SQL como por los datos erróneos.

Lo único que podría pensar es almacenar valores en Variables de sesión.

Estoy usando ASP.NET Core 2.xy jQuery si importa.

Esto fue similar, Protegiendo campos de formulario ocultos

    
pregunta johnny 28.03.2018 - 17:30
fuente

2 respuestas

10

No lo haces. El usuario puede cambiar lo que quiera. Un campo oculto no es diferente de un campo común desde la perspectiva del navegador o servidor.

Si desea almacenar datos secretos que necesitará el usuario, guárdelos en el lado del servidor en una sesión. Es la forma más rápida.

    
respondido por el ThoriumBR 28.03.2018 - 17:39
fuente
1

Puede utilizar HMAC o algún otro mecanismo de firma digital, como cifrar los datos "ocultos" con la clave de cifrado específica de la página y el usuario, y luego descifrarlos y validarlos en el lado del servidor después del envío. Esto permitiría que su aplicación detecte dichas modificaciones, ya sea que hayan sido realizadas por el usuario o por otra cosa, como errores de modificación de campo en Javascript.

Al menos un marco está haciendo esto, almacenando su estado completo en forma JSON (encriptado y base64) en campos ocultos.

La principal ventaja, y la única, aquí de simplemente almacenar el lado del servidor de datos asociado es la reducción de las necesidades de almacenamiento en el servidor. En este caso, todo lo que necesita almacenar es la clave de cifrado del estado actual.

Para estar seguro, la clave de cifrado debe generarse para cada uso (es decir, cada página y cada usuario). De lo contrario, un usuario malintencionado podría moverse por sus campos ocultos entre diferentes páginas (y diferentes usuarios), explotando su lógica incluso sin conocer los valores en bruto reales.

    
respondido por el George Y. 28.03.2018 - 22:46
fuente

Lea otras preguntas en las etiquetas