细扣sql注入问题

细扣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里第二个参数必须是有序的容器,或者单个的值
原文地址:https://www.cnblogs.com/godlover/p/12068068.html