mysql 注入补丁_Mysql数据库之sql漏洞注入

sql漏洞注入是利用sql语句拼接字符串造成入侵者不输入密码甚至不输入用户名就能登录。

#导入pymsql模块

importpymysql

user=input("用户名:")

pwd=input("密码:")#步骤一:python创建与mysql的连接

conn=pymysql.connect(host="127.0.0.1",user="root",password="123456",database="test")#步骤二:创建一个游标对象

get_cursor=conn.cursor()

sql="select * from userinfo2 where name='%s' and pwd='%s'" %(user,pwd)#步骤三:使用游标对象中的execute方法执行sql语句

get_cursor.execute(sql)#步骤四:将查询出的结果取出来

result=get_cursor.fetchone()ifresult:print("登录成功!")else:print("登录失败!")

通过上述代码中:假设用户名是:user,密码:123456

在通过输入用户名和密码正确的情况下,登录成功;只要有一个不正确,那么就登录失败。那么如何才能在不知道用户名和密码的情况下登录成功呢?如下:

首先我们输入正确的用户名和密码,得到的sql语句:select * from userinfo2 where name='user' and pwd='123456';

但是如果我们这样输入,也可以登录:abcdefg' or 1=1 --'

这种输入的话,得到的sql语句是:select * from userinfo2 where name='abcdefg' or 1=1 --' and pwd='123456';  这句话是绝对成立的,原因是后面的--将密码给注释掉了,前面的两个条件中,无论name什么值,在1=1是绝对正确的,查询数据库中所有的数据。

防止sql漏洞注入的方法

不要使用上面的字符串拼接的方法进行使用sql语句,而是要使用如下方法(将上面的方法修改):

方法一:使用元组或列表的方法代替字符串拼接

sql="select * from userinfo2 where name=%s and pwd=%s"get_cursor.execute(sql,[user,pwd])

方法二:使用execute提供的方法中的参数代替字符串拼接

sql="select * from userinfo2 where name=%s and pwd=%s"get_cursor.execute(sql,user,pwd)

方法三:使用字典的方法代替字符串拼接

sql="select * from userinfo2 where name=%(a)s and pwd=%(b)s"get_cursor.execute(sql,{'a':user,'b':pwd})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值