细扣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)
字段值不正确时,不会报错,会返回一个空的元组
但是字段名或者表不存在时会报错
12-18 02:59