2016-10-07 4 views
1

Я не хочу, чтобы сервер был принудительным, но я не хочу использовать CAPTCHA, поскольку они не являются дружественными к пользователю/Я не хочу полагаться на другую компанию - потому что я не собираюсь реализовывать свою собственную систему captcha.Как заблокировать попытки входа в систему с помощью SQL

Я думал о создании attempts таблицы с этой структурой:

________________________________________________________________ 
|   IP   |  ATTEMPTS  |  LOCK  | 
|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾| 
|  1.1.1.1  |   0   |   2   | 
|  ....  |  ....  |  ....  | 
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾   Yes I had fun making this 

И пусть пользователь имеет 5-10 попыток, перед сбросом в 0 и увеличение блокировки времени на коэффициент 2 - это за несколько минут.

Является ли это хорошим методом блокировки грубой силы?

Я бы логику, как это на моем сервере: - абстрагироваться

.... 
* on request to server do below * 

db.query("SELECT * FROM attempts WHERE IP= *REQUEST.IP* ",function(result){ 
    if (result.rows.length > 0 && result.rows[0].attempts > 5) { 
     if (CheckIfExpired(results.rows[0].lock)) { 
      if (loginFail) MultplyLockBy2(); 
      else RemoveFromAttemptsTable(); 
     } else res.status("403").send("You're locked out"); 
    } else normalLoginAttempt().ifFal(add1toAttempts()); 
.... 

У меня есть ощущение, что есть более эффективный способ сделать это изначально в SQL, я новичок в SQL. (Я использую postgresql).

Посмотрев на это, я предполагаю, что мне понадобится поле для начала, поэтому я могу рассчитать, когда истек срок блокировки.

ASP.net + Njinx/Apache + сессий + ...! = Node.js + SQL

+2

@NeilMcGuigan Это, безусловно, не дубликат вопроса ASP.Net –

+0

. На мой взгляд, принятый ответ (ваш) на самом деле довольно плох, поскольку он включает в себя запись состояния для неавторизованных вызовов (т. Е. Злоумышленник может заполнить ваш диск, используя разные имена пользователей для каждого вызова). Я бы * рассмотрел * ваш ответ * на Windows paltforms *, где нечто вроде 'fail2ban' не доступно. Для приложения nodejs, работающего в предположительно среде Linux, уже есть лучшее решение, готовое, проверенное, широко используемое. –

+0

Я действительно смущен. Я думаю, что могу реализовать fail2ban; Я реализую этот файл cookie, который всегда позволяет пользователю подключаться обратно к своей учетной записи без captcha; и я также могу использовать капчу в сочетании с локаутом; это хорошее решение? –

ответ

0

Используйте fail2ban. Ваш HTTP-запрос должен возвращать 401 (неавторизованный), а фильтр fail2ban должен соответствовать access_log для последовательного 401 и запретить вызывающему абоненту в течение 10 минут или около того (на уровне IP-брандмауэра).

Как вы заметили, ответ не имеет ничего общего с SQL, postgresql или nodejs.

+0

Будет ли он контролироваться сервером или обрабатываться извне программой fail2ban? –

+0

Кто такой 'сервер' в вашем вопросе? –

+0

как в приложении моего узла; Я прочитал страницу, и, похоже, я обновляю файл журнала, и fail2ban будет обрабатывать все это автоматически? –

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