IT/앱사용방법

파이썬) 로그인 횟수 제한 걸기

볼통통알파카 2022. 8. 8. 22:42
반응형

로그인 화면을 만들 때 파이썬으로 구성할 경우 DB로 제한 거는 방법을 소개하려고 한다.

 

로그인 횟수 제한 거는 이유

로그인 시도할 때 횟수 제한을 걸지 않으면 무차별 대입(brute forece) 공격에 취약해진다.

여기에 대비하기 위해 로그인 인증 횟수를 설정해 계정을 잠그거나 추가 인증 방식을 적용하는 등 2차 인증을 설정하는 방법을 추천한다.

 

로그인 횟수 제한 코드 예시
import hashlib
from django.shortcuts import render     
LOGIN_TRY_LIMIT = 5    
def login(request):
    user_id = request.POST.get('user_id', '')     
    user_pw = request.POST.get('user_pw', '')     
    
   # 로그인 실패기록 가져오기
    login_fail = models.LoginFail.objects.filter(user_id)
  
   # 로그인 실패횟수 초과로 인해 잠금된 계정에 대한 인증 시도 제한
    if login_fail.count() >= LOGIN_TRY_LIMIT:
        return render(request, '/account_lock.html', {'state':'account_lock'})
    else:
       sha = hashlib.sha256()    
       sha.update(user_pw)
       hashed_passwd = get_user_pw(user_id)    

       if sha.hexdigest() == hashed_passwd:     
          models.LoginFail.objects.filter(user_id).delete()
          return render(request, '/index.html', {'state':'login_success'})
       else:
          # DB에 로그인 실패횟수 기록
          models.LoginFail.objects.create(user_id)
          return render(request, '/login.html', {'state':'login_failed'})

코드 설명

로그인 시도 제한을 변수로 설정하고 로그인 실패 횟수를 변수로 저장하여 제한 설정 이상을 시도했을 경우 계정을 잠그는 형식이다.

DB에는 로그인 실패 횟수를 기록하여 무차별 공격 등 이상 징후를 식별할 수 있게 설정하였다.

 

로그인 횟수 제한 걸기 정리

1. 로그인할 때 실패 기록을 저장한다.

2. 로그인 횟수가 지정한 횟수를 넘기면 잠금 혹은 2중 인증단계로 넘어간다.

3. 잠금 된 아이디는 재인증 절차를 걸쳐 회복하거나 관리자 문의로 안내한다.

반응형