Come impedisci a qualcuno di modificare i valori nascosti in un modulo HTML?

2

Se ho un modulo HTML e ha ingressi nascosti per numeri ID e simili (quindi conosco la chiave id della tabella x da aggiornare), come posso proteggerlo in modo che la persona non possa semplicemente cambiarlo e rovinare le voci del database?

Ho un popup "bootstrap modale", ad esempio, che aggiungo input nascosti al modulo, quindi quando invio il modulo nel modal vengono inviate ed elaborate le chiavi del database corrette.

Qualcuno può facilmente cambiarlo (per non parlare della modifica dell'intestazione e del rinvio). Cosa posso fare? Il sito è protetto da username e password, ma a parte questo non sono sicuro di cosa fare. Non mi preoccupo tanto di SQL Injection quanto di dati non validi.

L'unica altra cosa che potrei pensare è di memorizzare valori in Session Variables.

Sto usando ASP.NET Core 2.xe jQuery se è importante.

Questo era simile, Protezione dei campi dei moduli nascosti

    
posta johnny 28.03.2018 - 17:30
fonte

2 risposte

10

Non lo fai. L'utente può cambiare ciò che vuole. Un campo nascosto non è diverso da un campo comune dal punto di vista del browser o del server.

Se si desidera memorizzare i dati segreti di cui l'utente avrà bisogno, memorizzarli sul lato server in una sessione. È il modo più veloce.

    
risposta data 28.03.2018 - 17:39
fonte
1

È possibile utilizzare HMAC o un altro meccanismo di firma digitale, come crittografare i dati "nascosti" con la chiave di crittografia specifica per pagina e utente e quindi decifrare e convalidare sul lato server dopo l'invio. Ciò consentirebbe alla tua applicazione di rilevare tali modifiche, indipendentemente dal fatto che siano state eseguite dall'utente o da qualcos'altro, come bug di modifica del campo in Javascript.

Almeno un framework lo sta facendo, memorizzando il suo stato completo in formato JSON (crittografato e base64) nei campi nascosti.

Il principale - e solo - vantaggio qui semplicemente archiviando i dati associati sul lato server sono le esigenze di storage ridotte sul lato server - in questo caso tutto ciò che serve per memorizzare è la chiave di crittografia per lo stato corrente.

Per essere sicuro, la chiave di crittografia dovrebbe essere generata per ogni utilizzo (ad esempio ogni pagina e ogni utente). In caso contrario, un utente malintenzionato potrebbe spostarsi tra i campi nascosti tra pagine diverse (e utenti diversi), sfruttando la tua logica anche senza conoscere i veri valori non elaborati.

    
risposta data 28.03.2018 - 22:46
fonte

Leggi altre domande sui tag