2014-04-21 70 views
2

在yii2中,用户表的表结构不包括salt列。盐不存储在数据库中yii2

$this->createTable('tbl_user', [ 
     'id' => Schema::TYPE_PK, 
     'username' => Schema::TYPE_STRING . ' NOT NULL', 
     'auth_key' => Schema::TYPE_STRING . '(32) NOT NULL', 
     'password_hash' => Schema::TYPE_STRING . ' NOT NULL', 
     'password_reset_token' => Schema::TYPE_STRING . '(32)', 
     'email' => Schema::TYPE_STRING . ' NOT NULL', 
     'role' => Schema::TYPE_SMALLINT . ' NOT NULL DEFAULT 10', 

     'status' => Schema::TYPE_SMALLINT . ' NOT NULL DEFAULT 10', 
     'create_time' => Schema::TYPE_INTEGER.' NOT NULL', 
     'update_time' => Schema::TYPE_INTEGER.' NOT NULL', 
    ], $tableOptions); 

这真的让我感到困惑。尽管Yii使用了一个salted hash,但它并没有默认存储在数据库中。我是否应该重写代码以使其存储在数据库中?如果我不在数据库中腌制盐,该怎么办?

回答

1

这个salt用于Yii2 Security helper不需要存储在db中,它只用于创建密码散列,而不需要将密码与散列进行比较。所以它非常安全。

+0

因此,为什么人们在密码散列旁边的db中存储salt? –

+0

另外,当我从loginForm发回数据时,我会以明文形式获取它。它不安全吗? –

+1

储存盐是一种老派的方法。你可以检查PHP函数http://www.php.net/manual/en/function.crypt.php http://www.php.net/manual/en/function.password-hash.php – Alex