Web アプリのフォームに、セキュリティ上の理由から改ざんから保護する必要がある隠しフィールドがあります。非表示フィールドの値が変更されたかどうかを検出し、適切に対応できるソリューションを考え出そうとしています (つまり、一般的な「問題が発生しました。もう一度やり直してください」というエラー メッセージが表示されます)。ソリューションは、ブルート フォース攻撃が実行不可能なほど十分に安全でなければなりません。うまくいくと思う基本的な解決策がありますが、私はセキュリティの専門家ではないので、ここで何かが完全に欠けている可能性があります。
私のアイデアは、2 つの非表示の入力をレンダリングすることです。1 つは保護する必要がある値を含む「important_value」という名前の入力で、もう 1 つは一定の長いランダム文字列と連結された重要な値の SHA ハッシュを含む「important_value_hash」という名前の入力です (つまり、同じ文字列は毎回使用します)。フォームが送信されると、サーバーは SHA ハッシュを再計算し、送信された important_value_hash の値と比較します。それらが同じでない場合、重要な値が改ざんされています。
追加の値を SHA の入力文字列 (おそらくユーザーの IP アドレス?) と連結することもできますが、それで本当に何かが得られるかどうかはわかりません。
これは安全ですか?それがどのように壊れているのか、そしてそれを改善するために何ができる/すべきかについての洞察を持っている人はいますか?
ありがとう!