【问题标题】:Turn of Cakephp Auth password hashing轮到 Cakephp Auth 密码散列
【发布时间】:2009-12-12 17:57:21
【问题描述】:

我正在将我的新工作中的 cakephp 应用程序从 l.1 升级到 1.2。我正在用强大的 Auth 组件替换自制的 1.1 授权代码。问题是密码没有在遗留数据库中散列。如何暂时关闭密码散列,以便开始使用 Auth 组件。

别担心,我会散列密码并稍后更改。

【问题讨论】:

    标签: authentication cakephp hash cakephp-1.2


    【解决方案1】:

    这是改编自另一个堆栈溢出答案的解决方案。通过覆盖 User::hashPassword 模型基本上什么都不做。

    How do I replace the cakephp password hashing algorithm?

    <?php
    class User extends AppModel {
        var $name = 'User';
    
        // this is used by the auth component to turn the password into its hash before comparing with the DB
        function hashPasswords($data) {
             return $data;
        }
    }
    ?>
    

    【讨论】:

    • 您还必须配置 AuthComponent 以针对用户模型进行身份验证以使用此... $this->Auth->authenticate = $this->User;
    • 实际上这在 CakePHP 2.x 中对我不起作用,所以我不得不创建一个像这样的自定义身份验证组件 - stackoverflow.com/questions/573307/…
    【解决方案2】:

    从技术上讲,您可以使用下面的查询一举散列数据库中的所有密码。首先备份您的表!

    UPDATE user_table SET password = SHA1(password)
    

    根据 CakePHP 手册,默认的散列方案是 SHA-1,所以除非你改变它,否则应该这样做。 SHA1 是一个内置的 MySQL 函数,尽管我认为它在大多数其他数据库中也可用。

    【讨论】:

    • 我知道我可以通过这种方式散列密码,但我只想暂时关闭它。
    • 另外,cakephp 使用盐,所以这是个坏主意。也许稍后您必须创建一个脚本来选择,然后通过 Security::hash() 进行哈希处理。
    • CakePHP Security::hash() 使用 app/config/core.php 中的安全盐值作为要散列的字符串前缀
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2013-10-05
    相关资源
    最近更新 更多