Django: is there a way to know if a url is valid in the application?
这就是我的目标:
- 用户想要登录
- 我在每一页上做了一个按钮,参数为urlback,例如,如果我们在
http://olivier.life/today 页上,登录按钮的URL将类似于http://olivier.life/login?back=today 页。 - 用户登录
- 用户登录后,我会检查"EDOCX1"(3)请求中是否有"EDOCX1"(2)。如果是这样,那么我将重定向到
GET 中的URL。
我的问题是一个安全问题:我只想知道
如何做到这一点?
使用
1 2 3 4 5 6 7 8 9 10 11 12 | def some_view(request): redirect_target = request.GET.get('back') if redirect_target: try: resolve_match = django.core.urlresolvers.resolve(redirect_target) except django.core.urlresolvers.Resolver404: # do something on bad input else: return django.shortcuts.redirect(redirect_target) else: # empty string redirect target, or not provided at all # do something else |
您可以使用urlresolver的resolve方法,如果该方法无法解析URL,则会引发异常,您可以在此处阅读有关urlresolver的更多信息:
1 2 3 4 5 6 7 8 9 | from django.core.urlresolvers import resolve, Resolver404 def yourView(request): try: if hasattr(request.GET, 'back'): resolve(request.GET['back']) return HttpResponseRedirect(request.GET['back']) except Resolver404: return Response('some other thing') |