django session会话验证身份 被 python requests库轻松绕过???
django 登录验证视图def login_view(request):
user = None
if request.method == "GET":
# 漏洞
print(request.session['username'])
if request.session.get('username') and request.session.get('userid'):
return HttpResponse("已经登录")
return render(request, "user/login.html")
elif request.method == "POST":
username = request.POST.get('username', None)
password = request.POST.get('password', None)
try:
user = User.objects.get(username=username)
except Exception as err:
print(f'--login user err:{err}')
return HttpResponse('用户名或者密码不匹配')
m = hashlib.md5()
m.update(password.encode())
if user.password == m.hexdigest():
request.session['username'] = username
request.session['userid'] = user.id
else:
return HttpResponse('用户名或者密码不匹配')
resp = HttpResponse('登录成功')
if 'remember' in request.POST:
resp.set_cookie('username', username, 60*60*24*3)
resp.set_cookie('userid', user.id, 60*60*24*3)
return resp
python requests 库获取session 值后,轻松突破这个验证!!!代码如下:
data = {"sessionid" : "ontpw9i4q6wh361b2lksm3lcz6hix92q"}
res = requests.get('http://127.0.0.1:8008/user/login', cookies = data)
print(res.content.decode())
print(res.cookies)
求大佬讲讲可靠方法! 还是我打开方式错了,还是理解错了。新手学 web 难道网站就这样轻易被爬了吗? 这样写session就是唯一的身份标识,带session访问肯定要显示登陆成功才正常,不明白你想问的是什么?
如果是为了防止非法爬虫,可以设置session的到期时间,写一个限制访问频率的中间件 如果事jwt 也一样有这个问题
你还可以对 Session Create IP 判断. 带色的小马甲 发表于 2021-11-27 22:07
这样写session就是唯一的身份标识,带session访问肯定要显示登陆成功才正常,不明白你想问的是什么?
如果 ...
明白了。感谢 萋小磊 发表于 2021-11-27 22:59
如果事jwt 也一样有这个问题
你还可以对 Session Create IP 判断.
谢谢,这个方法也挺好的, 这方法可以啊 明白了,感谢分享 如果Session 是长期有效那 确实是有这个问题 。
页:
[1]