
ユーザー認証用に MySQL バックエンドを備えた ProFTPD サーバーを実行しています。
ユーザーのパスワードは現在プレーンテキストです。私の目標は、すべてのユーザーのパスワードを暗号化してデータベースに保存することです。
1 人のユーザーの 1 つのパスワードを暗号化したい場合は、次の SQL コマンドを入力できることがわかっています。
update users set password= md5('MyPassword') where password="myPassword";
しかし、すべてのユーザーのすべてのパスワードを暗号化するにはどうすればよいでしょうか?
誰かが私を助けてくれることを願っています。
答え1
update users set password= md5('MyPassword') where password="myPassword";
MD5をハッシュとして使用するのは安全ではありません。MD5は非推奨です。
安全なハッシュ アルゴリズムは PBKDF2、bcrypt、scrypt などです。さらに、すべてのハッシュ アルゴリズムは salt とともに使用する必要があります。@Gerald Schneider がこのトピックに関する非常に優れたリンクを投稿しました:https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords
ここでの問題は、これらの保存ハッシュ アルゴリズムのいずれも、mysql に実装されていないことです。ProFTPD の mod sql モジュールには、PBKDF2 の認証モードがあります。ただし、mysql データベースで PBKDF2 ハッシュ パスワード、または別の安全なアルゴリズムでハッシュされたパスワードを OOTB で生成する方法はありません。
考えられる解決策としては、PHP を使用して HTML ページを作成することです。PHP には、安全なハッシュ パスワードを生成するための関数がデフォルトで実装されています。
私は ProFTPD フォーラムで、この問題に対する別の、おそらくより良い答えを知っている人がいないか尋ねました。 https://forums.proftpd.org/smf/index.php/topic,12110.0.html
はい、元の質問は、データベース内のすべてのパスワードを 1 つのコマンドで一度にハッシュするにはどうすればよいか、ということだったことは承知しています。しかし、まずは安全なハッシュ アルゴリズムを探す必要があると思います。