2014-09-24 13 views
5

Có thể sử dụng số Authenticating A User With Conditions của Laravel để ngăn chặn các cuộc tấn công bạo lực không?Ngăn chặn tấn công Brute-Force khi xác thực người dùng trong Laravel

answer for PHP, đề xuất thêm hai cột vào cơ sở dữ liệu của bạn (TimeOfLastFailedLoginNumberOfFailedAttempts) và sau đó kiểm tra các giá trị đó trên mỗi lần đăng nhập.

Đây là cú pháp Laravel để xác thực người dùng với điều kiện:

if (Auth::attempt(array('email' => $email, 'password' => $password, 'active' => 1))) 
{ 
    // The user is active, not suspended, and exists. 
} 

Có cách nào để sử dụng các thông số điều kiện để kiểm tra số nỗ lực chống lại một thời gian nhất định? Ví dụ: ít hơn 3 yêu cầu trong 60 giây qua.

Trả lời

9

Bạn có thể tạo một cái gì đó đơn giản như các lớp bên dưới để giúp bạn ngăn chặn điều đó:

class Login { 

    public function attempt($credentials) 
    { 
     if (! $user = User::where('email' => $credentials['email'])->first()) 
     { 
      //throw new Exception user not found 
     } 

     $user->login_attempts++; 

     if ($user->login_attempts > 2) 
     { 
      if (Carbon::now()->diffInSeconds($user->last_login_attempt) < 60) 
      { 
       //trow new Exception to wait a while 
      } 

      $user->login_attempts = 0; 
     } 

     if (! Auth::attempt($credentials)) 
     { 
      $user->last_login_attempt = Carbon::now(); 

      $user->save(); 

      //trow new Exception wrong password 
     } 

     $user->login_attempts = 0; 

     $user->save(); 

     return true; 
    } 

} 

Hoặc bạn có thể đi với một gói, như Sentry, kiểm soát throttling cho bạn. Sentry là mã nguồn mở.

1

Tôi biết đây là một câu hỏi cũ, nhưng vì nó được xếp hạng tốt trên Google, tôi muốn làm rõ rằng đặc điểm ThrottlesLogins đã tồn tại từ Laravel 5.1, và ngăn chặn các cuộc tấn công bạo lực.

Nó được bao gồm trong Auth \ LoginController theo mặc định.

Các vấn đề liên quan