File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 77from django .shortcuts import render
88from django .urls import reverse
99from django .utils .decorators import method_decorator
10+ from django .utils .http import url_has_allowed_host_and_scheme
1011from django .views .decorators .cache import never_cache
1112from django .views .decorators .csrf import csrf_protect
1213from django .views .decorators .debug import sensitive_post_parameters
@@ -47,7 +48,15 @@ def email_token_login(request: HttpRequest) -> HttpResponse:
4748 if res is not None :
4849 login (request , res )
4950 next_url = request .POST .get ("next" , None )
50- return HttpResponseRedirect (next_url )
51+ # Validate the next URL to prevent open redirects
52+ if next_url and url_has_allowed_host_and_scheme (
53+ url = next_url ,
54+ allowed_hosts = {request .get_host ()},
55+ require_https = request .is_secure (),
56+ ):
57+ return HttpResponseRedirect (next_url )
58+ else :
59+ return HttpResponseRedirect (settings .LOGIN_REDIRECT_URL )
5160 else :
5261 return render (request , "auth/token_login.html" , context = {"error" : True })
5362
You can’t perform that action at this time.
0 commit comments