sqlmap检测SQL注入及解决方案(Django)--超详细

本文通过一个有SQL注入风险的Django接口演示了SQL注入的危害,利用sqlmap进行了测试,展示了如何获取敏感信息。然后介绍了四种防止SQL注入的措施,包括参数化查询、使用ORM、最小权限原则和危险字符过滤。最后,讨论了Django中如何实施这些策略来增强应用安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:场景、演示
场景:查询等拼接SQL和参数的问题,博主为了演示,这里写一个有注入风险的接口,请勿模仿

class PostMan(View):

    def get(self, request):
        aa = request.GET.get('aa')
        with connections['default'].cursor() as cursor:
            sql = 'select * from sys_dict where pid = %s'%(aa)
            cursor.execute(sql)
            result = cursor.fetchall()
            print(result)
        return api_response(code=200,msg='aaa',data=result)

二:注入测试,这里采用sqlmap检测(通过postman等传入" or 1=1 or " 也能看到效果)。

  1. sqlmap安装及测试:github 下载安装包,解压,进入sqlmap.py同级目录,输入以下命令测试
python sqlmap.py -hh

安装成功图片
2. 注入检测,-u 后跟的是视图对应的接口地址

python sqlmap.py -u http://127.0.0.1:8006/app_test/postman_test/?aa=1
  1. 注入结果查看,终端查看输出信息或根据日志中的output位置 查看相应日志,如图

注入结果图片
危害极大,还可以查询所有表,库,dump数据等,不再赘述,命令可以参考这篇博客sqlmap常见命令
二:Django中sql注入解决方案,主要以下四种:

  1. 参数化查询,语法如下
sql = '''select * from shixiang_table where id= "%s" limit 10'''
cursor.execute(sql, [pk])
print(data_count)
  1. 使用ORM组件,flask的sqlalchemy,django的orm
    使用orm filter等进行查询操作
  2. 数据库最小权限原则,满足业务需求的最小权限,如只读账号等
  3. 危险字符过滤
    主要过滤两类字符:(1)一些SQL中的标点符号,如@,*以及单引号等等;(2)过滤数据库关键字insert、delete from、drop table、truncate、mid、delete、update、truncate、declare、master、script、exec、net user、drop等关键字或者关键词。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值