一、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
class Cookie_Login(unittest.TestCase):
csrf_token = ""
csrf_cookie = ""
def test_01_index(self):
url = 'http://47.107.116.139/phpwind'
res = requests.get(url=url)
value = re.search('name="csrf_token" value="(.+?)"', res.text)
Cookie_Login.csrf_token = value.group(1)
Cookie_Login.csrf_cookie = res.cookies
print(value)
def test_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
class Session_Login(unittest.TestCase):
csrf_token = ""
session = requests.session()
def test_01_index(self):
url = 'http://47.107.116.139/phpwind'
res = Session_Login.session.get(url=url)
value = re.search('name="csrf_token" value="(.+?)"', res.text)
Session_Login.csrf_token = value.group(1)
print(Session_Login.csrf_token)
def test_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
class Token_Login(unittest.TestCase):
csrf_token = ""
csrf_cookie = ""
def test_01_index(self):
url = 'http://47.107.116.139/phpwind'
res = requests.get(url=url)
value = re.search('name="csrf_token" value="(.+?)"', res.text)
Token_Login.csrf_token = value.group(1)
Token_Login.csrf_cookie = res.cookies
print(value)
def test_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)
|