python操作数据库(二)SQL语句参数化及防SQL注入

我们在做数据库开发过程中如果一不小心就会留下一些漏洞给别人留下可趁之机比如下面的代码:

import pymysql
import pymysql.cursors

conn=pymysql.connect(host="localhost",user="root",passwd="mysql",port=3306,db="studet")

cursor1=conn.cursors()

tem=input("请输入要查询的名字:")
sql = "select * from user where name=%s"%tem
cursor1.execute(sql)
a=cursor1.fetchall()
print(a)
conn.close()

代码本来的意思是根据输入的学生名字获得对应学生的详细信息,但是有的有人会利用代码的漏洞,比如下图img4.png

就能跳过要输入的name,直接获取所有信息,当这种方法被用到用户的登陆时,后果是可怕的。

python的数据库操作提供了参数化这个功能,只需要对代码进行一点微小的修改,就能有效避免这种结果,还能不影响他的真实效果。修改如下:
import pymysql
import pymysql.cursors

conn=pymysql.connect(host="localhost",user="root",passwd="mysql",port=3306,db="studet")

cursor1=conn.cursors()

tem=input("请输入要查询的名字:")
sql ="select * from user where name=%s"
cursor1.execute(sql,tem)
a=cursor1.fetchall()
print(a)
conn.close()

再次输入SQL注入语句就会得到下面的结果:
img6.png
这样就能很好的屏蔽掉了SQL注入!

标签: none

添加新评论