ユーザーのパスワード(.net Webアプリケーション内)をSHA2と次のソルトでハッシュします。
- アプリケーションソルト-データベースの外部に保存されます(この場合、Webアプリケーションweb.configは暗号化された文字列として)-これは、ログイン、新しいユーザーの作成、パスワードの変更などに関連するストアドプロシージャに渡されます。
- ユーザーごとのソルト(現在ユーザーテーブルに格納されているSQLの一意の識別子)は、デフォルトを使用して挿入時に自動的に生成されます
(CONVERT([char](36),newid(),(0)))
- データベースソルト-データベース内の設定テーブルに格納されているソルト。
- パスワード-そしてもちろんユーザーのパスワード。
これはレインボーや辞書攻撃などに役立ちますが、誰かがセキュリティに穴を見つけてデータベースに対して更新ステートメントを実行した場合、具体的には、ユーザーがサイトに登録するのを妨げるものを考えていました。彼らが知っているパスワードは、管理者アカウントのソルトとハッシュをソルトとハッシュに置き換えます-したがって、彼らに私たちのサイト/アプリケーションへの完全な管理者アクセスを与えますか?
これは私たちが現実的に心配すべきリスクですか?もしそうなら、それは専門用語/標準的な予防技術を持っていますか?
何らかの方法でユーザーID(この場合は整数)をハッシュに含めることを考えていました-これに関するベストプラクティスが何であるかを知りたいだけですか、それとも私たちは物事を考えすぎていますか?
PS: SHA2はパスワードに使用するのに理想的なハッシュではなく、BCryptなどの低速のハッシュ方式が推奨されることを知っています。これは、プロジェクトに参加する前に行われた決定でした。
PS:私たちのWebアプリケーション(およびそのアプリケーションキー)はSQLサーバーから厳重にファイアウォールで保護されています-それらの間で開いているポートは1つだけで、SQLに使用されます)