IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 接口自动化-Cookie、Session、Token鉴定解决方案 -> 正文阅读

[PHP知识库]接口自动化-Cookie、Session、Token鉴定解决方案

一、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)
        # 通过正则表达式获取到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  # 获取cookie
        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()  # 获取session

    # 第一次访问网站
    def test_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)

    # 登录
    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)
        # 通过正则表达式获取到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  # 获取cookie
        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)
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:16:01  更:2022-04-22 18:17:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 13:01:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码