赞
踩
最近在学Django的博客项目,将项目的后端和前端写完后,发现有安全问题(随便输入个网站都能进,按道理来说只有登陆了才能这么放肆阿),都是自己摸索的解决方法,可能不那么正规,羸弱的我只能这么弄,学识不够阿。
Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。
#如果用户名和密码正确,如下:
auth.login(request, user) # 当前登录对象
response['user'] = user.username
# 设置session
request.session['login'] = 'ok'
# 获取用户想直接访问的URL
url = request.GET.get('next')
# 如果有,就跳转到客户初始想访问的URL
if not url:
# 没有则默认跳转到index页面
url = '/index/'
print("request.session['login']:", request.session['login'], url)
return redirect(url)
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirect
class Check_Login(MiddlewareMixin):
def process_request(self, request):
next_url = request.path_info
if not next_url.startswith('/login/'):
is_login = request.session.get('login', '')
print("next_url", next_url, is_login)
if not is_login:
return redirect('/login/')
1.在跳转前中间件中输出了具体的路径,但是发现这些路径都不能进入判断条件,那就将路径设置为可以进入if的写法
2.在正确的验证码和用户密码跳转前,因为是使用的Ajax的传值方法,所以在js代码中写入alert提示,提示如果可以说明能重新跳转。
在中间件中的标签明显是只接受login/开头的链接,如果得到的不是login的链接,统统重定向到登录界面
所以解决方法就是将注册和验证码的链接改成login开头的嘛
这样一来,就得到解决了,但是羸弱的我搞了半个小时才搞清思路。
删除线格式 删除线格式 删除线格式 删除线格式 删除线格式 删除线格式 删除线格式 删除线格式
前面的问题解决了,然后开开心心的输入验证码和密码啥的,点半天,又一直回到了login。
if user:
auth.login(request, user) # 当前登录对象
response['user'] = user.username
# 设置session
request.session['login'] = 'ok'
# 获取用户想直接访问的URL
url = request.GET.get('next')
# 如果有,就跳转到客户初始想访问的URL
if not url:
# 没有则默认跳转到index页面
url = '/index/'
print("request.session['login']:", request.session['login'], url)
return redirect(url)
if user: auth.login(request, user) # 当前登录对象 response['user'] = user.username # 设置session request.session['login'] = 'ok' # 获取用户想直接访问的URL url = request.GET.get('next') # 如果有,就跳转到客户初始想访问的URL if not url: # 没有则默认跳转到index页面 url = '/index/' print("request.session['login']:", request.session['login'], url) # return redirect(url) return JsonResponse(response) else: response['msg'] = "用户名或密码错误!"
因为js里面输出的是原网页地址,所以打印的是这个
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。