一、Cookie鉴权
http协议:无连接、无状态,请求无关联、独立
京东:登录、搜商品、下单、支付、评论
什么是Cookie?
cookie是在服务器产生的存储在客户端的一小段文本信息,格式是字典,键值对。
Cookie的分类
会话级:保存内存,当浏览器关闭就会丢失。
持久化:保存硬盘,只有当失效时间到了才会被清除。
如何查看Cookie
name、value、domain、path、expries.size
Cookie如何实现鉴权(原理)
当客户端第一次访问服务器时,那么服务器就会产生Cookie,然后通过响应头的方式在Set-Cookie传输到客户端,客户端从第2-N请求都会自动带上Cookie
致命弱点:cookie保存在客户端,对于敏感信息用户名、密码、身份证安全
"""
@Project: pytestDemo-master
@Description:Cookie鉴权
@Time: 2022/4/13 15:45
@Author:MING
"""import re
import unittest
import requests
classCookie_Login(unittest.TestCase):
csrf_token =""
csrf_cookie =""# 第一次访问网站deftest_01_index(self):
url ='http://47.107.116.139/phpwind'
res = requests.get(url=url)# 通过正则表达式获取到csrf_token的值
value = re.search('name="csrf_token" value="(.+?)"', res.text)
Cookie_Login.csrf_token = value.group(1)# 获取csrf_token值
Cookie_Login.csrf_cookie = res.cookies # 获取cookieprint(value)# 登录deftest_02_login(self):
url ="http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
data ={"username":"123456","password":"123456","csrf_token": Cookie_Login.csrf_token,"backurl":"http://47.107.116.139/phpwind/","invite":""}
headers ={"Accept":"application/json,text/javascript, /; q=0.01","X-Requested-with":"XMLHttpRequest"}
res = requests.post(url=url,data=data,headers=headers,cookies=Cookie_Login.csrf_cookie)print(res.text)
返回成功:
{"referer":"http%3A%2F%2F47.107.116.139%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin%26a%3Dwelcome%26_statu%3DQmdHbEJmREJXR0ZGbUluY1QwMDZLNGozOHVaQmkxJTJGSTJVOG5jMnZwalFteHpwQ3h0T2pRNVZPSDhhS0d4ZzZmfGh0dHA6Ly80Ny4xMDcuMTE2LjEzOS9waHB3aW5kL3w","refresh":false,"state":"success","data":"","html":"","message":[""],"__error":""}
二、Session鉴权
当用户第一次访问服务器时,然后在服务器保存一个sessionid,这个sessionid是经过加密然后通过cookie把这sessionid保存到客户端,然后请求服务器的时候只发送sessionid。
致命弱点:解决了cookie不安全的问题,但是随着有出息了新的问题,当用户量特别大的时候导致服务器奔溃。
服务器集群:
淘宝:10万用户,10亿sessionid,100000服务器=10亿/100000?
请求IP捆绑,session复制,单点登录
"""
@Project: pytestDemo-master
@Description: Session鉴权
@Time: 2022/4/13 15:45
@Author:MING
"""import re
import unittest
import requests
classSession_Login(unittest.TestCase):
csrf_token =""
session = requests.session()# 获取session# 第一次访问网站deftest_01_index(self):
url ='http://47.107.116.139/phpwind'
res = Session_Login.session.get(url=url)# 通过正则表达式获取到csrf_token的值
value = re.search('name="csrf_token" value="(.+?)"', res.text)
Session_Login.csrf_token = value.group(1)# 获取csrf_token值print(Session_Login.csrf_token)# 登录deftest_02_login(self):
url ="http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
data ={"username":"sa1213","password":"123456","csrf_token": Session_Login.csrf_token,"backurl":"http://47.107.116.139/phpwind/","invite":""}
headers ={"Accept":"application/json,text/javascript, /; q=0.01","X-Requested-with":"XMLHttpRequest"}
res = Session_Login.session.post(url=url,data=data,headers=headers)print(res.text)
返回成功:{"referer":"http%3A%2F%2F47.107.116.139%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin%26a%3Dwelcome%26_statu%3DQmdHbEJmREJXR0ZGbUluY1QwMDZLNGozOHVaQmkxJTJGSTJVOG5jMnZwalFteHpwQ3h0T2pRNVIzUnVTNHRvMkxifGh0dHA6Ly80Ny4xMDcuMTE2LjEzOS9waHB3aW5kL3w","refresh":false,"state":"success","data":"","html":"","message":[""],"__error":""}
三、token鉴权
当一个用户登录之后,就给他发送一个token令牌,下一次用户再次请求的时候,只需要带上这个token令牌,
token可以通过抓包抓取。
加密:
对称加密:DES,AES
双钥加密:RSA
之加密不解密:MD5,SHA
token的分类:
access_token: 有时间限制,限制在15分钟
refresh_token: 一般15天
面试题:cookie,session,token鉴权的相同点和区别?
相同点:都是用于做鉴权的,都是服务器产生的。
区别:
1.cookie存储在客户端,session存储在服务端,session相对来说比较安全
2.session存在服务器内存,token存在服务器的文件或者数据库中,token的好处是比session
更省服务器资源。token只需要在服务解密即可。
出现了新的问题:第三方支付,银行,金融项目,安全的要求更高。
接口签名:Sign
"""
@Project: pytestDemo-master
@Description: Cookie鉴权
@Time: 2022/4/13 15:45
@Author:MING
"""import re
import unittest
import requests
classToken_Login(unittest.TestCase):
csrf_token =""
csrf_cookie =""# 第一次访问网站deftest_01_index(self):
url ='http://47.107.116.139/phpwind'
res = requests.get(url=url)# 通过正则表达式获取到csrf_token的值
value = re.search('name="csrf_token" value="(.+?)"', res.text)
Token_Login.csrf_token = value.group(1)# 获取csrf_token值
Token_Login.csrf_cookie = res.cookies # 获取cookieprint(value)# 登录deftest_02_login(self):
url ="http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
data ={"username":"sa1213","password":"123456","csrf_token": Token_Login.csrf_token,"backurl":"http://47.107.116.139/phpwind/","invite":""}
headers ={"Accept":"application/json,text/javascript, /; q=0.01","X-Requested-with":"XMLHttpRequest"}
res = requests.post(url=url,data=data,headers=headers,cookies=Token_Login.csrf_cookie)print(res.text)
版权归原作者 展望之客 所有, 如有侵权,请联系我们删除。