Laravel 5 Hash函数在共享主机上运行速度非常慢

时间:2015-10-24 09:51:21

标签: php laravel laravel-5

我目前正在使用Laravel for Android设备开发一个简单的API。 我正在尝试验证每个请求,以便我知道请求是由合法用户进行的。为此,我要求每个合法请求都包含参数user id和key。 android应用程序将获取用户成功登录所需的信息并将其存储在设备中。 来自设备的每个请求都将包含用户ID和密钥作为参数。

我使用中间件来检查每个请求的代码:

class AuthenticatedUser {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $input = $request->only('userID','key');
        $u = User::where(['id' => $input['userID']])->first();
        if($u && Hash::check($input['key'],$u->app_key)){
            Session::flash('user',$u);
            return $next($request);
        }
        else{
            return response(['status' => 'ERROR' , 'message' => 'AUTH_FAILURE', 'payload' => [] ],401);
        }
    }

}

基本上,中间件检查具有给定用户ID和密钥的用户是否存在,如果用户存在,则它将用户存储在临时会话中。如果不存在此类用户,则会返回错误。

我的问题是每个请求需要800-1000毫秒。经过一些修修补补后,我发现Hash :: Check是导致延迟的原因。我试图删除Hash :: Check代码,每个请求大约需要300-400毫秒

然后我尝试在两个不同的免费VM Workspace服务上部署此应用程序,并且请求将花费大约350-400ms,Hash :: Check保持不变。有什么可能导致这种情况?为什么Hash :: Check函数在共享主机上需要很长时间,而在VM上却不需要?

共享主机上使用的PHP版本是5.4.41,而VM的PHP版本是5.5.9

2 个答案:

答案 0 :(得分:0)

最新的IT安全指南建议使用较慢的散列函数,因为用户登录网站一次,此登录可能有点慢但登录过程较慢会阻碍暴力攻击。

如果要检查每个休息请求中的凭据,则应考虑使用其他散列函数。

答案 1 :(得分:0)

这很可能仅仅是不同资源的问题。即使VM使用PC资源的1/8,也可能是共享主机上的两倍。

您可以降低工作系数以加快散列过程(这也会降低强力抵抗力)。您可以考虑的一个选项是JSON web tokens