배경 : 내 장고 응용 프로그램에서 속도 제한에 대한 다양한 django-brake을 사용하고확장 로그인 기능 (장고 프로젝트)
. 이제는 앱에서 무차별 로그인 시도를 제한하도록 구성해야합니다.
login
보기를 데코레이터 ratelimit(field='username')
으로 장식하고보기 내에 was_limited = getattr(request, 'limited', False)
을 추가하는 것이 좋습니다. was_limited
은 동일한 사용자 이름 (OR IP)이> 5 번/분으로 사용되는 경우 True
입니다. 하나는 등, 사용자의 기분을 상하게 리디렉션 할 수 있습니다
시나리오 :
는 현재, 내가 django.contrib.auth.views
에 login
기능을 사용하고 있습니다. 내 urls.py 에이 함수를 장식 할 수 있습니다. 그러나 나는 그 방법으로 함수 안에 was_limited = getattr(request, 'limited', False)
을 포함시킬 수 없다. 그리고 그 플래그가 True
일 때만 문제가되는 사용자를 상대로 조치를 취할 수 있기 때문에 이는 업무상 중요한 문제입니다.
질문 :
그래서 장식과 위의 기능을 포함하도록이 기능을 확장하는 가장 좋은 방법은 무엇입니까? 모든 것을 무시해야합니까? 그렇다면 어떻게해야합니까? 제발 조언. 내가 직접 django.contrib.auth.views
에 필요한 코드를 작성할 수 있지만 해킹입니다.
초보자 인 저는 이런 상황을 처리하는 가장 좋은 방법을 찾으려고합니다. 좋은 예가 될 것입니다. 나는 아래 django.contrib.auth.views.login
을 포함하고있어 참고로
:
@sensitive_post_parameters()
@csrf_protect
@never_cache
def login(request, template_name='registration/login.html',
redirect_field_name=REDIRECT_FIELD_NAME,
authentication_form=AuthenticationForm,
current_app=None, extra_context=None):
"""
Displays the login form and handles the login action.
"""
redirect_to = request.REQUEST.get(redirect_field_name, '')
if request.method == "POST":
form = authentication_form(data=request.POST)
if form.is_valid():
# Ensure the user-originating redirection url is safe.
if not is_safe_url(url=redirect_to, host=request.get_host()):
redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)
# Okay, security check complete. Log the user in.
auth_login(request, form.get_user())
if request.session.test_cookie_worked():
request.session.delete_test_cookie()
return HttpResponseRedirect(redirect_to)
else:
form = authentication_form(request)
request.session.set_test_cookie()
current_site = get_current_site(request)
context = {
'form': form,
redirect_field_name: redirect_to,
'site': current_site,
'site_name': current_site.name,
}
if extra_context is not None:
context.update(extra_context)
return TemplateResponse(request, template_name, context,
current_app=current_app)
아 아니요. 'was_limited' 플래그에 액세스 할 수 없다면 실제로 리디렉션 할 수 없으며 문제가되는 사용자에 대해 어떤 종류의 작업을 수행 할 수 없습니다. 속도 제한에 도달하면 플래그가 '참'으로 바뀝니다. –