sql注入防御问题
python-django想测试下自己的有没有漏洞 发现只要登录失败 返回的页面根本不带查询信息 是不是相当于没有这个漏洞? 成功和两种失败页面如下
比如登录页面 点击登录后跳转到logined页面(请别吐槽为什么不写成loginned pycharm怎么也不给过这个拼写 既然都不给过 我也懒得改了 直接忽略拼写提示...)
处理函数大概是这样的 传给网页的数据是个字典 至少含有'result'项(logined.html根据result生成不同的登陆结果页面 成功则跳转主页 失败则根据result提示原因)
def logined(request):
username = request.POST.get('username')
password = request.POST.get('password')
user = User.objects.filter(username__exact=username)
if len(user) != 1:
result = 'username failed'
data = {
'result': result,
}
else:
if password != User.objects.get(username__exact=username).password:
result = 'password failed'
data = {
'result': result,
}
else:
result = 'ok'
request.session['user'] = {
'username': user.username,
'email': user.email,
'img': str(user.img),
}
data = {
'result': result,
'username': user.username,
'email': user.email,
}
return render(request, 'personal/logined.html', data)
加密储存的事 在做了在做了(咕咕咕
你用了Django 的ORM基本就没有sql注入的问题。
sql注入一般来说是手写sql才会出现。
你这里代码的逻辑没有什么问题。就是有一两个地方比较啰嗦 if len(user) != 1: 这句是如果是用户名长度!=1就返回错误信息吗?不太理解这个逻辑
还有 else...if...可以直接写为elif newu 发表于 2019-6-22 17:28
if len(user) != 1: 这句是如果是用户名长度!=1就返回错误信息吗?不太理解这个逻辑
还有 else...if... ...
len(user) != 1那个 user是一个查询集
长度为0代表没查到 长度为1代表查到了用户名一致的记录 而且正好是1个
至于长度为2或者更多 当时确实没细想 觉得没准能应对什么攻击手段吧
elif那个 里边还有if和else 外部写成elif 内部就还得补条件并不省事 ietar 发表于 2019-6-22 17:38
len(user) != 1那个 user是一个查询集
长度为0代表没查到 长度为1代表查到了用户名一致的记录 而且正 ...
哦,这样啊,如果设置username为主键那确实这种方法可行,
但是常规思维不是用来对比username == get('username')嘛{:10_266:}
newu 发表于 2019-6-22 17:42
哦,这样啊,如果设置username为主键那确实这种方法可行,
但是常规思维不是用来对比username == get( ...
那前面那个username哪来呢 还是得从数据库找吧 ietar 发表于 2019-6-22 18:03
那前面那个username哪来呢 还是得从数据库找吧
对,就是这个意思
页:
[1]