2

少し前に、私は新しいプロジェクトに参加しました。それはかなり長い間開発中でした。私が驚いたのは、すべてのユーザーのパスワードが暗号化されていない形式で保存されていることです。

私はこれの巨大なセキュリティ上の脆弱性を私たちの経営陣に説明しました - 彼らはそれに同意し、プロジェクトをより安全にしたいと考えているようです. チームメンバーも同意見です。

システムには約 2 万人のユーザーがいます。

実際には、暗号化されていないパスワードを暗号化された形式に移行するという、これを機能させるのは非常にストレスの多い作業です。何か問題が発生すると、プロジェクトの災害につながる可能性があります。

どうすればこのストレスを下げることができますか? バックアップ?単体テスト(統合テスト)?

4

6 に答える 6

5

暗号化されていないユーザーパスワードが含まれているため、バックアップには注意してください:-)

パスワードがデータベースに保存されていると仮定すると、簡単な解決策は次のようになります。

1) テーブル データ全体の安全なバックアップを作成する

2) 新しい列を作成します (PasswordEncrypted または類似の名前)

3) UPDATE クエリを使用して、32 バイト以上のソルトを使用しながら、暗号化されていないパスワードの MD5 で各行の新しい列を更新します。今日のほとんどすべてのデータベース システムには MD5 機能が備わっているため、SQL プロンプトから離れる必要さえありません。

4) 暫定的にプレーンテキストの列を保持し、それに応じてアプリケーション/スクリプトを更新して、ソルト化されたパスワードで動作するようにします。

5) プレーンテキストの古いパスワード列の名前を変更して、一時的にプレイから外し、アプリケーションをテストします。問題がある場合は、手順 4 に戻って間違いを修正します。

6) すべてが正常に機能したら、プレーンテキストのパスワード列を削除します

7) 成功した可能性のある以前の攻撃の影響を軽減するために、ある程度のセキュリティを確保したので、新しいパスワードを選択するようユーザーに勧めます。

于 2009-05-02T15:27:35.647 に答える
2

これはどんなプロジェクトですか?Webアプリケーション、デスクトップアプリケーション?

リファクタリングの道を進んでいる場合、パスワードを暗号化などのリバーシブルに保存する必要がある理由はありますか?一般に、SHAのようなものでパスワードをハッシュしてから、同じアルゴリズムで入力をハッシュして結果を比較することをお勧めします。実際のパスワードではなく、ハッシュ値のみを保存します。これにより、暗号化が破られてパスワードが公開される可能性にユーザーをさらすことなく、誰かが正しいパスワードを入力したことを確認できます。

あなたのアプローチに関する具体的な情報は私が提供できるものではありませんが(それがどのように機能するかわからないため)、あなたの最善の策は、ハッシュされたパスワードを保存する追加の列を作成し、既存のパスワードをハッシュして、それらを維持することですパスワードを変更した日付。この新しい列をすべての新しい開発に使用し、移動が完了してテストされたら、プレーンテキストのパスワードを使用して列を削除します。

于 2009-05-02T15:35:58.700 に答える
1

ログイン試行ごとに両方の認証方法(暗号化と非暗号化)を実行することで、信頼性を高めることができます。結果が異なる場合は、アラートの電子メールが送信されます。この変更はユーザーには表示されないため、数週間から数か月にわたって実行される可能性があります。古い認証と新しい認証が十分に高い割合のユーザーに対して機能することを確認したら、古い認証を非アクティブ化します。

于 2009-05-02T15:34:45.223 に答える
1

多くのコーナー ケース (大文字と小文字、数字、記号、Unicode 文字、長いパスワードなど) をテストする、多くのテストを記述します。開発とテストを行っているときは、古いシステムに戻すためのシステムを作成します (もちろん、古いパスワード リストを提供します。パスワードがハッシュされると、それらを直接変換することはできなくなります)。現在のパスワード リストのコピーを保存します。テスト ファイルまたはテスト データベースでパスワードを変換し、保存したパスワードのコピーを使用して、すべてが機能することをテストします。システムを本番環境に移行し、ユーザーにとって機能することを確認します。そうでない場合は、古いシステムに戻すための計画を既にテストしています。数週間動作することが実証されたら、平文のパスワード リストを削除できます。これで準備は完了です。

于 2009-05-02T15:30:05.687 に答える
1

現在のパスワードをハッシュし、それらを新しいデータベース フィールドに保存し、パスワード フィールドを削除しながらそのフィールドの使用を開始します。次に、ユーザーのデータを安全に保つために、より多くのセキュリティ メカニズムを実装したので、パスワードを変更するのに適した時期であることをユーザーに通知します。

バックアップを取得するには、次のようにしますSELECT * INTO Backup FROM UserData

于 2009-05-02T15:31:32.830 に答える
0

可能であれば、これを試すことができます: すべてのユーザーに電子メールを送信して、タイムアウト期間でパスワードを更新します。その後、パスワードを変更しないと作業できなくなります。これらの新しいパスワードをハッシュして、ハッシュを保存します。これには、フロントエンド (つまり、送り返すデータ) でいくつかの変更が必要になります。

于 2009-05-02T15:24:53.827 に答える