细扣sql注入问题
import pymysql
conn = pymysql.connect(
user='root',
password='555',
host='127.0.0.1',
port=3306,
charset='utf8',
database='db1',
)
# 新建游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
username = input('username:').strip()
password = input('password:').strip()
sql = "select *from user where username='%s' and password ='%s' " % (username, password)
cursor.execute(sql)
res = cursor.fetchall()
if res:
print(res)
else:
print('username or password error!')
user表中字段
ID username passwor
1 egon 123
这里要注意几点:
1.如果直接将sql语句拼接好以后传给execute,%s必须要加引号,为了让数据库识别是字符串
但是,如果将关键字传给execute处理时,%不需加上引号,execute会做处理
sql = "select *from user where username= %s and password = %s "
cursor.execute(sql,(username, password))
2.sql注入问题两中方式
正确的用户名' -- adad.a.da.da.d.a(任意字符)
随便什么' or 1=1 -- ada.d.a.d.a.(任意字符)
3.cursor.execute(sql)
字段值不正确时,不会报错,会返回一个空的元组
但是字段名或者表不存在时会报错
4.关键字参数的%s必须要用“”,如果强行拼接的话,如果直接交给execute处理的话,不需要加引号
5.execute里第二个参数必须是有序的容器,或者单个的值