0

フレームワークのユーザー認証クラスで忙しく、現在は少し前にチュートリアルから入手したコードを使用しています。ほとんどのプログラマーと同様に、コードが何をするのかを理解する必要があり、より安全になるようにコードを変更したいと考えています。以下のバージョンでは Mac で失敗することがわかったので、書き直す必要があります。これが私の認証クラスの以前の方法です(アカウントを登録するために使用されます:

 // security is a config file with a global salt in $security->security_salt
 public function generate_crypt($password) {
    $security = new security();
    $crypt_salt = '$6$rounds=5000$' . uniqid() . "$";
    $password = $password . $security->security_salt;
    return crypt($password, $crypt_salt);
}

上記の例では 1 つのグローバル ソルトしか使用していませんが、ユーザーごとに個別のソルトを使用したほうがよいと感じているため、効果的に次のように変更することを考えています。

/*
 * properties below are from methods, I am just putting it as
 * seperate variables to be understood a little better:
 *
 */

 private function generate_user_salt() {
       return hash('sha512',uniqid());
 }

 private function generate_crypt($password, $user_salt) {
    $security = new security_config();
    $password = $password . $security->security_salt;
    return crypt($password, $user_salt);
}

private register() {
      $user_salt = $this->generate_user_salt();
      $password = $this->generate_crypt($_POST['password'],$user_salt);
      // Write user to database where `salt`=>$user_salt and `password`=>$password;
}

認証するには、次のようにします。

 // Data is retrieved from database and stored in a $this->credentials array property:
 private function validate_password() {
    $security = new security_config();
    $salted_password = $_POST['password'] . $security->security_salt;
    if (crypt($salted_password, $this->credentials['salt']) == $this->credentials['password']) {
        return true;
    }
}

上記をテストしたところ、正しく動作しているように見えますが、これは crypt() を使用する正しい方法であり、まったく安全ですか? セキュリティブリッジがあり、誰かがユーザーのソルトを取得した場合でも、ファイルにあるソルトが必要になるように、2 つのソルト文字列を使用しようとしています。

特定の機能やアルゴリズムをサポートしていないさまざまなプラットフォームで問題が発生することなく、現実的なセキュリティを最大限に活用したいと考えています。

これは安全ですか、または別の方法を使用する必要がありますか?

4

0 に答える 0