2016-06-06 8 views
0

Я пытаюсь понять, как бороться с грубой силой на моем сайте. Основываясь на всех исследованиях, я сделал верхние ответы: Account Lockout & Captcha.Предотвращение нападения грубой силы на MVC

Если я заблокирую пользователя, то я откажу им в обслуживании за х раз. Это означает, что если атакующий атакует 10 разных учетных записей, он заблокирует их всех. Затем, когда время закончится, он снова закроет их. В основном он может держать на нем и держать пользователей заблокированы на неопределенный срок. Пользователи могут связаться со мной, но теперь у меня будет 10 билетов, с которыми мне придется иметь дело, и я предпочел бы избежать этой работы, если это возможно. Так что я точно не понимаю, как это тогда полезно? Злоумышленник может не учитывать, но они вызовут у меня и пользователей много горя.

Как я могу бороться с этим? Запрет Ip кажется бессмысленным, поскольку его можно легко изменить.

+2

оффтоп. Не вопросы программирования (пока). Вместо этого попробуйте веб-мастер. –

+0

Эта ссылка имеет отличную запись на разных методах, я раньше использовал парольную задержку. https://www.owasp.org/index.php/Blocking_Brute_Force_Attacks – Slicksim

ответ

1

Не отображать идентификатор пользователя, используемый для публичного входа в систему. Имейте отдельный идентификатор дисплея. Например, они могут войти в систему со своим адресом электронной почты и выбрать другое имя для отображения. Если у злоумышленника нет идентификатора пользователя, он не может повторить попытки входа в систему и заблокировать другого пользователя.

+0

У меня это уже реализовано. Но даже тогда он может получать массовые электронные письма с другого сайта и только начинать с него. Мои сообщения об ошибках также не позволяют отказаться, если учетная запись заблокирована или что-то еще, поэтому они не узнают, правильно ли они это взяли, но мне интересно, есть ли что-нибудь, что я могу сделать, чтобы остановить их? – Bojan

+0

Некоторые службы CDN, такие как Incapsula или Akamai, помогают. Их основная цель - как CDN, поэтому все запросы в ваш домен проходят через их серверы. Это позволяет использовать другие функции, такие как блокирование запросов из определенных доменов. Они могут даже иметь возможность активно блокировать домены, если они обнаруживают подозрительную активность. –

+0

сколько накладных расходов это добавит на страницу загружается? На сколько времени пострадает время загрузки? – Bojan

0

Вы можете использовать PoliteCaptcha, в котором отображается только код, если JavaScript отключен (как в большинстве автоматических скриптов) или когда первая попытка отправки не удалась. Это делает captcha невидимым для большинства ваших обычных пользователей, но PITA для спамеров.

0

Вы можете добавить инкрементную задержку, которая удваивается после каждой неудачной попытки входа в систему, после нескольких попыток входа в систему задержка слишком велика для работы грубой силы (например, после 20 попыток задержка составляет 6 дней).

[HttpPost] 
public async Task<ActionResult> Login(LoginViewModel viewModel, string returnUrl) 
{ 
    // incremental delay to prevent brute force attacks 
    int incrementalDelay; 
    if (HttpContext.Application[Request.UserHostAddress] != null) 
    { 
     // wait for delay if there is one 
     incrementalDelay = (int)HttpContext.Application[Request.UserHostAddress]; 
     await Task.Delay(incrementalDelay * 1000); 
    } 

    if (!ModelState.IsValid) 
     return View(); 

    // authenticate user 
    var user = _userService.Authenticate(viewModel.Username, viewModel.Password); 

    if (user == null) 
    { 
     // login failed 

     // increment the delay on failed login attempts 
     if (HttpContext.Application[Request.UserHostAddress] == null) 
     { 
      incrementalDelay = 1; 
     } 
     else 
     { 
      incrementalDelay = (int)HttpContext.Application[Request.UserHostAddress] * 2; 
     } 
     HttpContext.Application[Request.UserHostAddress] = incrementalDelay; 

     // return view with error 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
     return View(); 
    } 

    // login success 

    // reset incremental delay on successful login 
    if (HttpContext.Application[Request.UserHostAddress] != null) 
    { 
     HttpContext.Application.Remove(Request.UserHostAddress); 
    } 

    // set authentication cookie 
    _formsAuthenticationService.SetAuthCookie(
     user.Username, 
     viewModel.KeepMeLoggedIn, 
     null); 

    // redirect to returnUrl 
    return Redirect(returnUrl); 
} 

Там больше деталей на this post

 Смежные вопросы

  • Нет связанных вопросов^_^