Yii2 账号登录需要注意的地方 - 生成密码函数generatePasswordHash很慢

技巧库 · fecommerce · 于 6年前 发布 · 5384 次阅读

原文链接: Yii2 账号登录需要注意的地方 – 生成密码函数generatePasswordHash很慢

Yii2默认的用户组件,在登录用户,都需要先把密码加密,然后去数据查询核对,

密码加密的代码如下:

\Yii::$app->security->generatePasswordHash($password);

Yii2/base/Security.php

public function generatePasswordHash($password, $cost = null)
    {
        if ($cost === null) {
            $cost = $this->passwordHashCost;
        }

        if (function_exists('password_hash')) {
            /** @noinspection PhpUndefinedConstantInspection */
            return password_hash($password, PASSWORD_DEFAULT, ['cost' => $cost]);
        }

        $salt = $this->generateSalt($cost);
        $hash = crypt($password, $salt);
        // strlen() is safe since crypt() returns only ascii
        if (!is_string($hash) || strlen($hash) !== 60) {
            throw new Exception('Unknown error occurred while generating hash.');
        }

        return $hash;
    }

最后,发现代码耗时卡在 $hash = crypt($password, $salt);

也即是php的crypt函数。在我的linux上面耗费了520ms

现在的系统验证码,有很多包,是可以破的,玩爬虫的,都有付费的机器学习类的破验证码,普通的文字数字验证码,很轻松能破,验证码一破,账号注册登录被爬虫搞起来,很快就把php进程堵死了。

如果你的系统,登录注册很频繁,建议重写一下这个函数,不过是否在某些方面存在安全性,这个我说不好,自己取舍一下。

上面是我测试的结果,大家有兴趣可以都测试试试。

本文由 fecommerce 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。


微信

共收到 4 条回复
fecommerce#16年前 1 个赞

我上面的结果结果为php5.4测试的。

如果用php5.5 支持 pasword_hash函数,就不会是上面的结果

password_hash

(PHP 5 >= 5.5.0, PHP 7)

password_hash — Creates a password hash

php 5.5 ,php7,我没有测试,有朋友测试过,也是很慢,具体多慢,我没有要到具体数据,大家可以自己测试试试。

fecommerce#36年前 0 个赞

最后,推荐一下我的开源商城:Fecshop。

Github地址:https://github.com/fancyecommerce/yii2_fecshop

Fecshop 全称为Fancy ECommerce Shop,是基于php Yii2框架之上开发的一款优秀的开源电商系统,遵循OSL3.0协议, Fecshop支持多语言,多货币,架构上支持pc,手机web,手机app,和erp对接等入口,您可以免费快速的定制和部署属于您的电商系统。

FecShop English Demo:http://fecshop.appfront.fancyecommerce.com/

FecShop 中文演示地址:http://fecshop.appfront.fancyecommerce.com/cn

FecShop QQ群:186604851 ,入群验证:fecshop

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册