首先搭建蓝图
- 用户登录功能
- 知识回顾1,使用MD5加密密码
import hashlib
# md5加密功能
hash = hashlib.md5(b'dkfjdfj') # 加盐
hash.update(bytes('123', encoding='utf-8'))
ret = hash.hexdigest()
print(ret)
加密后的123
D:\python3.6\python.exe
2756aee19e1944dd1efd7d5fc9ed0fe9
Process finished with exit code 0
把加密后的密文存进数据库中的用户信息
-
知识回顾2使用pymysql
步骤
1 建立连接
2 获取光标
3 执行sql语句
4 获取结果
如图
fetchone获取符合条件的一条数据
fetchall获取全部信息
-
关于pymysql语句注入的问题:
sql语句中如果自己使用字符串拼接,mysql中1=1永远成立,所以就算条件没有通过也会执行前面的sql语句
如图
py文件中执行结果,即使用户名不正确也可以获取到执行sql语句
navicat同样可以执行
也就是说用户输入以下用户名是可以登录的
解决方法
使用sql注入可以避免以上问题
防止时不要用字符串格式化拼接就可以了
格式如图
也可以不用元祖,通过字典的形式注入
- 把以上代码放到项目中
首先开启manage脚本
自动运行__init__文件
找到对应的路由
如路由是login
则运行以下文件
如果用户名和密码正确跳到了路由/home
于是执行以下蓝图
没有session重新登录,有session跳到home页面
附
settings中的类
模版文件login.html