时间:2021-07-01 10:21:17 帮助过:19人阅读
安装2:在pycharm中安装
pymysql的用法:(连接数据库、获取游标、执行SQL语句、关闭游标,关闭连接)
import pymysql # 获取用户输入 name = input("用户名>>:") pwd = input("密码>>:") # 校验用户输入的用户名和密码是否正确 # 去数据库里取数据做判断 # 1. 连上数据库 conn = pymysql.connect(host="localhost",database="s8", user="root", password="", charset="utf8") # 不是utf-8 # 光有链接还不行,需要获取光标,让我能够输入SQL语句并执行 cursor = conn.cursor() # 2. 执行SQL语句 --> select * from userinfo where name=name and pwd=pwd sql = "select * from userinfo WHERE name=‘%s‘ and pwd=‘%s‘;" % (name, pwd) print(sql) ret = cursor.execute(sql) # 获取影响的行数 # 关闭光标和连接 cursor.close() conn.close() if ret: print("登陆成功") else: print("登录失败")
虽然已经实现了对输入的用户名和密码与数据库中的数据进行对比了,但时出现了一点问题,如果用户输入时输入--符号时就会注释掉它后面的sql不会执行,就会绕开密码,例如:
最后那一个空格,在一条sql语句中如果遇到select * from t1 where id > 3 -- and name=‘egon‘;则--之后的条件被注释掉了 #1、sql注入之:用户存在,绕过密码 egon‘ -- 任意字符 #2、sql注入之:用户不存在,绕过用户与密码 xxx‘ or 1=1 -- 任意字符
解决方式:
复制代码 # 原来是我们对sql进行字符串拼接 # sql="select * from userinfo where name=‘%s‘ and password=‘%s‘" %(user,pwd) # print(sql) # rows=cursor.execute(sql) #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了) sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上 rows=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
对数据库数据的增、删、改、查:
持续更新....
mysql之pymysql模块相关
标签:登陆 sql注入 print bsp 数据 inf user img post