session交互:
- 服务端会话技术
- 数据存储在服务器中
- 默认Session存储在内存中
- Django中默认会把Session持久化到数据库中
- Django中Session的默认过期时间时14天
- 主键是字符串、数据是使用了数据安全
- 使用的base64
- 在前部添加了一个混淆字符串
- Session依赖于Cookie
- get(key, default=None) 根据键获取会话的值
- clear() 清除所有会话
- flush() 删除当前的会话数据并删除会话的cookie
- delete request[‘sission_id’]删除会话
- session.session_key 获取session的key
username = request.session.get['username'] #获取session
request.session['username'] = username #给session赋值
del request.session['username'] #删除指定session
request.session.flush() #删除所有sission、cookie
token
-
服务端会话技术
-
自定义的session
-
#手写生成token def generate_token(username, password): c_time = time.ctime() hashlib.new("md5", (username + password + c_time).encode("utf-8")).dexdigest()
-
pycham接口测试工具 tools->httpclient->test Restful web service
-
Cookie和Session,Token对比
- Cookie使用更简洁,服务器压力更小,数据不是很安全
- Session服务器要维护Session,相对安全
- Token拥有Session的所有优点,自己维护略微麻烦,支持更多终端
CSRF
-
防跨站攻击
-
防止恶意注册,确保客户端是我们自己的客户端
-
使用了cookie中csrftoken进行验证,传输
-
服务器发送给客户端,客户端将cookie获取过来,还要进行编码转换(数据安全)
-
如何实现?
- 在我们存在csrf_token标签的页面中,响应会自动设置一个cookie,csrftoken
- 当我们提交时,会自动验证csrftoken
- 验证通过,正常执行以后流程,验证不通过,返回403
-
csrf豁免 添加装饰器
@csrf_exempt def login(request): pass
算法
-
编码解码
- Base64
- urlencode
-
摘要算法,指纹算法,杂凑算法
- MD5,SHA
- MD5默认是128位的二进制
- 32位的十六进制
- 32位的Unicode
- 单项不可逆的
- 不管输入多长,输出都是固定长度
- 只要输入有任意的变更,输出都会发生巨大的变化
- MD5,SHA
-
加密算法
- 对称加密
- 一把钥匙
- DES,AES
- 加密解密效率高
- 密钥一旦丢失所有数据都会受到极大影响
- 非对称加密
- 两把钥匙
- 公钥加密私钥解密或私钥加密公钥解密
- RSA,PGP
- 安全性最高
- 算法复杂,需要时间空间都比较大
- 对称加密