1010from django .utils .decorators import method_decorator
1111from django .utils .translation import gettext_lazy as _ , get_language
1212from django .utils .text import format_lazy
13+ from django .utils .http import url_has_allowed_host_and_scheme
1314from django .views .decorators .clickjacking import xframe_options_exempt
1415from django .views .decorators .csrf import csrf_exempt
1516from django .db import DatabaseError
@@ -62,7 +63,10 @@ def post(self, request, *args, **kwargs):
6263 SubmissionTagging .objects .create (submission = submission , tag = subtag )
6364
6465 # Redirect back to the previous page
65- return redirect (request .headers .get ('referer' , '/' ))
66+ referer = request .headers .get ('referer' , '/' )
67+ if not url_has_allowed_host_and_scheme (url = referer , allowed_hosts = {request .get_host ()}):
68+ referer = '/'
69+ return redirect (referer )
6670
6771
6872class SubmissionTaggingRemoveView (CourseInstanceBaseView ):
@@ -80,7 +84,10 @@ def post(self, request, *args, **kwargs):
8084 SubmissionTagging .objects .filter (submission = submission , tag = subtag ).delete ()
8185
8286 # Redirect back to the previous page
83- return redirect (request .headers .get ('referer' , '/' ))
87+ referer = request .headers .get ('referer' , '/' )
88+ if not url_has_allowed_host_and_scheme (url = referer , allowed_hosts = {request .get_host ()}):
89+ referer = '/'
90+ return redirect (referer )
8491
8592
8693class ExerciseInfoView (ExerciseBaseView ):
0 commit comments