Skip to content

Commit dfb0d1b

Browse files
committed
security: implement login rate limiting to mitigate brute-force attacks
1 parent 6568aa4 commit dfb0d1b

1 file changed

Lines changed: 21 additions & 14 deletions

File tree

app/Http/Controllers/Auth/AuthController.php

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@
3939
*/
4040
class AuthController extends Controller
4141
{
42+
protected $maxLoginAttempts = 5;
43+
protected $lockoutTime = 60;
44+
45+
use \Illuminate\Foundation\Auth\ThrottlesLogins;
4246
/* to redirect after login */
4347

4448
// if auth is agent
@@ -70,6 +74,11 @@ public function __construct()
7074
$this->middleware('guest', ['except' => ['getLogout', 'verifyOTP', 'redirectToProvider']]);
7175
}
7276

77+
public function loginUsername()
78+
{
79+
return 'email';
80+
}
81+
7382
public function redirectToProvider($provider, $redirect = '')
7483
{
7584
if ($redirect !== '') {
@@ -304,22 +313,20 @@ public function postLogin(LoginRequest $request)
304313
try {
305314
// dd($request->input());
306315
event('auth.login.event', []); //added 5/5/2016
307-
// Set login attempts and login time
308-
$value = $_SERVER['REMOTE_ADDR'];
309-
$usernameinput = $request->input('email');
310-
$password = $request->input('password');
311-
if ($request->input('referer')) {
312-
$referer = 'form';
313-
} else {
314-
$referer = '/';
316+
317+
$throttles = $this->isUsingThrottlesLoginsTrait();
318+
319+
if ($throttles && $this->hasTooManyLoginAttempts($request)) {
320+
return $this->sendLockoutResponse($request);
321+
}
322+
$credentials = $this->getCredentials($request);
323+
324+
if (Auth::attempt($credentials, $request->has('remember'))) {
325+
return $this->handleUserWasAuthenticated($request, $throttles);
315326
}
316-
$field = filter_var($usernameinput, FILTER_VALIDATE_EMAIL) ? 'email' : 'user_name';
317-
$result = $this->confirmIPAddress($value, $usernameinput);
318327

319-
// If attempts > 3 and time < 30 minutes
320-
$security = Security::whereId('1')->first();
321-
if ($result == 1) {
322-
return redirect()->back()->withErrors('email', 'Incorrect details')->with(['error' => $security->lockout_message, 'referer' => $referer]);
328+
if ($throttles) {
329+
$this->incrementLoginAttempts($request);
323330
}
324331

325332
$check_active = User::where('email', '=', $request->input('email'))->orwhere('user_name', '=', $request->input('email'))->first();

0 commit comments

Comments
 (0)