ietar 发表于 2019-6-22 17:12:30

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)

加密储存的事 在做了在做了(咕咕咕

wongyusing 发表于 2019-6-22 17:12:31

你用了Django 的ORM基本就没有sql注入的问题。

sql注入一般来说是手写sql才会出现。

你这里代码的逻辑没有什么问题。就是有一两个地方比较啰嗦

newu 发表于 2019-6-22 17:28:29

if len(user) != 1: 这句是如果是用户名长度!=1就返回错误信息吗?不太理解这个逻辑

还有 else...if...可以直接写为elif

ietar 发表于 2019-6-22 17:38:25

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 内部就还得补条件并不省事

newu 发表于 2019-6-22 17:42:18

ietar 发表于 2019-6-22 17:38
len(user) != 1那个 user是一个查询集
长度为0代表没查到 长度为1代表查到了用户名一致的记录 而且正 ...

哦,这样啊,如果设置username为主键那确实这种方法可行,

但是常规思维不是用来对比username == get('username')嘛{:10_266:}

ietar 发表于 2019-6-22 18:03:59

newu 发表于 2019-6-22 17:42
哦,这样啊,如果设置username为主键那确实这种方法可行,

但是常规思维不是用来对比username == get( ...

那前面那个username哪来呢 还是得从数据库找吧

newu 发表于 2019-6-22 18:25:47

ietar 发表于 2019-6-22 18:03
那前面那个username哪来呢 还是得从数据库找吧

对,就是这个意思
页: [1]
查看完整版本: sql注入防御问题