6 SQL注入问题 +功能补充
SQL注入问题
import pymysql # 创建链接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_5', charset='utf8' ) # 生成一个游标对象 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典 # 获取用户名和密码 username = input('username>>>:').strip() password = input('password>>>:').strip() # 构造SQL语句 # sql = "select * from userinfo where name='%s' and password='%s'"%(username,password) # 针对核心数据 不要自己拼接 交由execute方法帮你筛选再拼接 sql = "select * from userinfo where name=%s and password=%s" print(sql) # 执行SQL语句 cursor.execute(sql,(username,password)) res = cursor.fetchall() if res: print(res) print('登录成功') else: print('用户名或密码错误') """ 登录功能 1.获取用户名和密码 2.基于用户名和密码直接精准查找 """ """ 问题1 用户名正确 不需要密码也能登录 问题2 用户名和密码都不需要也能登录 SQL注入问题的产生 就是通过一些特殊符号的组合 达到某些特定的效果从而避免常规的逻辑 SQL注入问题如何解决 execute方法自动帮你解决 """
功能补充
import pymysql # 创建链接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_5', charset='utf8', autocommit=True # 涉及到增删改 自动二次确认 ) # 生成一个游标对象 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典 sql1 = 'select * from userinfo' sql2 = 'insert into userinfo(name,password) values(%s,%s)' sql3 = 'update userinfo set name="jasonNB" where id=1' sql4 = 'delete from userinfo where id=2' # 1.查询语句可以正常执行并获取结果 # cursor.execute(sql1) # 2.插入语句能够执行 但是并没有影响表数据 # cursor.execute(sql2,('jackson',666)) # 3.更新语句能够执行 但是并没有影响表数据 # res = cursor.execute(sql3) # print(res) # 4.删除语句能够执行 但是并没有影响表数据 # res = cursor.execute(sql4) # print(res) '''针对增删改操作 需要二次确认才可生效''' # cursor.execute(sql2,('jackson',666)) # conn.commit() # cursor.execute(sql3) # conn.commit() # cursor.execute(sql4) # conn.commit() cursor.executemany(sql2,[('jason111',123),('jason222',321),('jason333',222)]) # 主动关闭链接 释放资源 # conn.close()
import pymysql # 创建链接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_5', charset='utf8', autocommit=True # 涉及到增删改 自动二次确认 ) # 生成一个游标对象 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典 sql1 = 'select * from userinfo' sql2 = 'insert into userinfo(name,password) values(%s,%s)' sql3 = 'update userinfo set name="jasonNB" where id=1' sql4 = 'delete from userinfo where id=2' # 1.查询语句可以正常执行并获取结果 # cursor.execute(sql1) # 2.插入语句能够执行 但是并没有影响表数据 # cursor.execute(sql2,('jackson',666)) # 3.更新语句能够执行 但是并没有影响表数据 # res = cursor.execute(sql3) # print(res) # 4.删除语句能够执行 但是并没有影响表数据 # res = cursor.execute(sql4) # print(res) '''针对增删改操作 需要二次确认才可生效''' # cursor.execute(sql2,('jackson',666)) # conn.commit() # cursor.execute(sql3) # conn.commit() # cursor.execute(sql4) # conn.commit() cursor.executemany(sql2,[('jason111',123),('jason222',321),('jason333',222)]) # 主动关闭链接 释放资源 # conn.close()