web-dev-qa-db-fra.com

Comment maintenez-vous quelqu'un de changer de valeurs cachées dans un formulaire HTML?

Si j'ai un formulaire HTML, et qu'il a des entrées cachées pour les numéros d'identification et similaires (donc je connais la clé d'identité de la table X à mettre à jour), comment puis-je le sécuriser afin que la personne ne puisse pas simplement le changer et bousiller Entrées de base de données?

J'ai un modal bootstrap "popup", par exemple, que j'apprécie les entrées cachées sur le formulaire afin que je soumets le formulaire dans le modal Les touches de base de données correctes sont soumises et traitées.

Quelqu'un peut facilement changer cela (sans parler d'éditer l'en-tête et de renvoyer). Que puis-je faire? Le site est sécurisé avec nom d'utilisateur et mot de passe, mais à part cela, je ne suis pas sûr de quoi faire. Je ne suis pas aussi inquiet pour l'injection SQL autant que de mauvaises données.

La seule autre chose que je pouvais penser est de stocker des valeurs dans les variables de session.

J'utilise ASP.NET CORE 2.X et JQUERY si cela compte.

C'était similaire, protéger les champs de forme cachés

3
johnny

Tu ne le fais pas. L'utilisateur peut changer ce qu'ils veulent. Un champ caché n'est pas différent d'un champ commun du navigateur ou du point de vue du serveur.

Si vous souhaitez stocker des données secrètes, l'utilisateur aura besoin, stockez-les sur une session. C'est le moyen le plus rapide.

11
ThoriumBR

Vous pouvez utiliser HMAC ou un autre mécanisme de signature numérique, tel que crypter les données "cachées" avec la clé de cryptage spécifique à la page et l'utilisateur, puis le décrypter et la valider sur le côté serveur après la soumission. Cela permettrait à votre application de détecter de telles modifications, qu'ils aient été effectués par l'utilisateur ou par autre chose, comme des bugs modifiant sur le terrain dans JavaScript.

Au moins un cadre fait cela, en stockant son état complet dans le formulaire JSON (chiffré et base64) dans des champs cachés.

La principale - et seul - avantage ici sur la simple stockage du côté des données associées Server est une réduction des besoins de stockage sur le côté serveur - dans ce cas, tout ce que vous devez stocker est la clé de cryptage de l'état actuel.

Pour être sécurisé, la clé de cryptage doit être générée pour chaque utilisation (c'est-à-dire chaque page et chaque utilisateur). Sinon, un utilisateur malveillant serait capable de se déplacer autour de vos champs cachés entre différentes pages (et différents utilisateurs), exploitant votre logique, même sans connaître les valeurs brutes.

2
George Y.