2016-10-07 2 views
1

서버에 의한 강제적 인 강제 설치는 원하지 않지만 사용자 친화적이지 않기 때문에 보안 문자를 사용하고 싶지는 않습니다. 다른 회사에 의존하고 싶지 않습니다. - 내 자신의 captcha 시스템을 구현하지 않을 것이기 때문에.SQL을 사용하여 로그인 시도를 잠그는 방법

나는이 구조와 attempts 테이블을 만들 생각했습니다

________________________________________________________________ 
|   IP   |  ATTEMPTS  |  LOCK  | 
|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾| 
|  1.1.1.1  |   0   |   2   | 
|  ....  |  ....  |  ....  | 
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾   Yes I had fun making this 
그리고 사용자가 2 배 잠금 시간을 증가 0 로 재설정하기 전에, 5-10 시도하자 - 몇 분 안에있어.

무차별 대항력을 차단하는 좋은 방법입니까?

내가 내 서버에서이 같은 로직이있을 것이다 : - 나는 기본적으로 SQL에서이 작업을 수행 할 수있는보다 효율적인 방법이 느낌이

.... 
* 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과 초보자입니다. (postgresql을 사용하고 있습니다).

이 글을보고 나서 시작 시간 필드가 필요하다고 생각한 것입니다. 잠금이 만료 된 시점을 계산할 수 있습니다.

ASP.net + Njinx/아파치 + 세션 + ...! = Node.js를 + SQL

+2

@NeilMcGuigan 이것은 확실히 ASP.Net 질문의 중복이 아닙니다. –

+0

승인되지 않은 호출 (즉, 공격자가 디스크를 채울 수 있습니다. 각 통화마다 고유 한 사용자 이름). 나는'fail2ban'과 같은 것을 쉽게 이용할 수없는 Windows paltform *에 대한 귀하의 대답 *을 고려할 것입니다. Linux 환경에서 실행되는 nodejs 앱의 경우 이미 더 나은 솔루션 준비, 테스트 및 널리 사용됩니다. –

+0

나는 정말로 혼란 스럽다. 나는 fail2ban을 구현할 수 있다고 생각한다; 항상 사용자가 captcha없이 계정에 다시 연결할 수 있도록하는 쿠키를 구현합니다. 또한 잠금 기능과 함께 captcha를 사용할 수도 있습니다. 이게 좋은 해결책인가? –

답변

0

사용 fail2ban. HTTP 요청은 401 (인증되지 않음)을 반환하고 fail2ban 필터는 연속 401에 대해 access_log와 일치해야하며 호출자는 10 분 정도 (IP 방화벽 수준에서) 금지되어야합니다.

알다시피, 대답은 SQL, postgresql 또는 nodej와는 아무 관련이 없습니다.

+0

서버에 의해 제어되거나 fail2ban 프로그램에서 외부 적으로 처리됩니까? –

+0

질문에 '서버'가 누구입니까? 내 노드 앱에서와 마찬가지로 –

+0

; 페이지를 읽었을 때 로그 파일을 업데이트하고 fail2ban이 자동으로이 파일을 처리합니다. –

관련 문제