1- from django .http .response import HttpResponse , HttpResponseRedirect , JsonResponse , HttpResponseNotFound
1+ from django .http .response import HttpResponse , HttpResponseRedirect , HttpResponsePermanentRedirect , JsonResponse , HttpResponseNotFound
22
33# Not an XSS sink, since the Content-Type is not "text/html"
44# FP reported in https://github.com/github/codeql-python-team/issues/38
@@ -18,15 +18,35 @@ def safe__manual_content_type(request):
1818# XSS FP reported in https://github.com/github/codeql/issues/3466
1919# Note: This should be an open-redirect sink, but not an XSS sink.
2020def or__redirect (request ):
21- return HttpResponseRedirect (request .GET .get ("next" )) # $HttpResponse mimetype=text/html
21+ next = request .GET .get ("next" )
22+ return HttpResponseRedirect (next ) # $HttpResponse mimetype=text/html MISSING: HttpRedirectResponse redirectLocation=next
2223
23- def information_exposure_through_redirect (request , as_kw = False ):
24+ def information_exposure_through_redirect (request , as_kw = False , perm_redirect = False ):
2425 # This is a contrived example, but possible
2526 private = "private"
27+ next = request .GET .get ("next" )
2628 if as_kw :
27- return HttpResponseRedirect (request . GET . get ( " next" ) , content = private ) # $HttpResponse mimetype=text/html responseBody=private
29+ return HttpResponseRedirect (next , content = private ) # $HttpResponse mimetype=text/html responseBody=private MISSING: HttpRedirectResponse redirectLocation=next
2830 else :
29- return HttpResponseRedirect (request .GET .get ("next" ), private ) # $HttpResponse mimetype=text/html responseBody=private
31+ return HttpResponseRedirect (next , private ) # $ HttpResponse mimetype=text/html responseBody=private MISSING: HttpRedirectResponse redirectLocation=next
32+
33+
34+ def perm_redirect (request ):
35+ private = "private"
36+ next = request .GET .get ("next" )
37+ return HttpResponsePermanentRedirect (next , private ) # $ HttpResponse mimetype=text/html responseBody=private MISSING: HttpRedirectResponse redirectLocation=next
38+
39+
40+ def redirect_through_normal_response (request ):
41+ private = "private"
42+ next = request .GET .get ("next" )
43+
44+ resp = HttpResponse () # $ HttpResponse mimetype=text/html
45+ resp .status_code = 302
46+ resp ['Location' ] = next # $ MISSING: redirectLocation=next
47+ resp .content = private # $ MISSING: responseBody=private
48+ return resp
49+
3050
3151# Ensure that simple subclasses are still vuln to XSS
3252def xss__not_found (request ):
0 commit comments