pythonsql注入_python使用mysql,sql注入问题

python使用mysql

importpymysql

conn=pymysql.connect(

host= '127.0.0.1', #连接地址

port = 3306, #端口

user = root, #用户名

password = '', #密码

database = 'db', #库名称

charset = 'utf8' #编码格式 utf8,不是utf-8

)

cursor= conn.cursor(pymsql.cursors.DictCursor) #产生一个游标,以字典的形式返回查询出来的数据,键是表的字段,值是表字段对应的信息

sql = select * from userinfo #写sql语句

cursor.execute(sql) #执行传入的sql语句

print(cursor.fetchone()) #拿到表中一条数据

print(cursor.fetchone())print(cursor.fetchone())

cursor.scroll(1,'absolute') #absolute绝对移动,前面数字写几,就相对于起始位置向后移动几位

cursor.srcoll(1,'relative') #relative相对移动,前面写几,就相对于当前位置向后移动几位

print(cursor.fetchall()) #拿到表中所有的数据

sql注入问题

conn =pymysql.connect(

host= '127.0.0.1',

port= 3306,

user=root,

password= '',

database= 'db',

charset= 'utf8')

cursor=conn.cursor(pymsql.cursors.DictCursor)

username= input('请输入用户名:')

password= input('请输入密码:')

sql= "select * from userinfo where name = '%s' and password ='%s'" %s(username, password)

res=cursor.execute(sql)ifres:print(cursor.fetchall())else:print('账号或密码错误')

我们用上述一段代码诠释一下sql注入的问题, 当我们输入正确的账号密码的时候,发现可以正常打印字段数据,当我们输入错误账号或密码时,就显示账号密码错误

1636480-20190822211118555-458907377.png

1636480-20190822211130076-1419819438.png

以我们只知道用户名为例

1636480-20190822211537631-1078009674.png

竟然查到了用户的所有信息,这个是根据 -- 注释做到的sql注入

假如我们账号密码都不知道,那么如何用sql注入去获取网站的用户信息呢

1636480-20190822211708665-1556336257.png

在我们对账号密码毫不知情的情况下,我们使用or判断条件的成立,再加上 --注释,可以获取到网站所有的用户信息

根据以上两个问题我们应该如何解决呢?

conn =pymysql.connect(

host= '127.0.0.1',

port= 3306,

user=root,

password= '',

database= 'db',

charset= 'utf8')

cursor=conn.cursor(pymsql.cursors.DictCursor)

username= input('请输入用户名:')

password= input('请输入密码:')

sql= "select * from userinfo where name = %s and password =%s"res=cursor.execute(sql,(username,password)) # execute可以自动识别sql语句中的%s,它可以帮助你过滤特殊的字符,避免sql注入的问题ifres:print(cursor.fetchall())else:print('账号或密码错误')

总结:

1.sql注入,就是利用注释等具有特殊意义的符号,来完成的

2.后续写sql语句时,不要手动去拼接关键性的数据,而是交由execute去拼接

python对mysql的增,改,删操作

importpymysql

conn=pymysql.connect(

host= '127.0.0.1',

port= 3306,

user=root,

password= '',

database= 'db',

charset= 'utf8')

cursor=conn.cursor(pymsql.cursors.DictCursor)

sql= "insert into user(name,password) values('wu','123')" #插入,增

cursor.execute(sql)

conn.commit() 在新增时要写conn.commit()

importpymysql

conn=pymysql.connect(

host= '127.0.0.1',

port= 3306,

user=root,

password= '',

database= 'db',

charset= 'utf8')

cursor=conn.cursor(pymsql.cursors.DictCursor)

sql= "update user set name='qazqaz' where id = 1" #修改

cursor.execute(sql)

conn.commit() #在修改时要写conn.commit()

importpymysql

conn=pymysql.connect(

host= '127.0.0.1',

port= 3306,

user=root,

password= '',

database= 'db',

charset= 'utf8')

cursor=conn.cursor(pymsql.cursors.DictCursor)

sql= "delete from user where id = 1" #删除

cursor.execute(sql)

conn.commit()#在删除时要写conn.commit()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值