鱼C论坛

 找回密码
 立即注册
查看: 3753|回复: 6

[已解决]sql注入防御问题

[复制链接]
发表于 2019-6-22 17:12:30 | 显示全部楼层 |阅读模式
20鱼币
python-django

想测试下自己的有没有漏洞 发现只要登录失败 返回的页面根本不带查询信息 是不是相当于没有这个漏洞? 成功和两种失败页面如下
succ.png fail_2.png fail_1.png



比如登录页面 点击登录后跳转到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[0].username,
                'email': user[0].email,
                'img': str(user[0].img),
            }
            data = {
                'result': result,
                'username': user[0].username,
                'email': user[0].email,
            }
    return render(request, 'personal/logined.html', data)

加密储存的事 在做了在做了(咕咕咕
最佳答案
2019-6-22 17:12:31
你用了Django 的ORM基本就没有sql注入的问题。

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

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

最佳答案

查看完整内容

你用了Django 的ORM基本就没有sql注入的问题。 sql注入一般来说是手写sql才会出现。 你这里代码的逻辑没有什么问题。就是有一两个地方比较啰嗦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-22 17:12:31 | 显示全部楼层    本楼为最佳答案   
你用了Django 的ORM基本就没有sql注入的问题。

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

你这里代码的逻辑没有什么问题。就是有一两个地方比较啰嗦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-22 17:28:29 | 显示全部楼层
if len(user) != 1: 这句是如果是用户名长度!=1就返回错误信息吗?不太理解这个逻辑

还有 else...if...可以直接写为  elif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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 内部就还得补条件  并不省事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

但是常规思维不是用来对比username == get('username')嘛

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-6-22 18:03:59 | 显示全部楼层
newu 发表于 2019-6-22 17:42
哦,这样啊,如果设置username为主键那确实这种方法可行,

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

那前面那个username哪来呢 还是得从数据库找吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-22 18:25:47 | 显示全部楼层
ietar 发表于 2019-6-22 18:03
那前面那个username哪来呢 还是得从数据库找吧

对,就是这个意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 18:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表