• 探索请求头中的UUID的不同版本:UUID1、UUID3、UUID4和UUID5


    背景:

    ​ 最近在做一些网站的逆向分析的时候,请求头会出现uuid这个字段,出一篇文章讲一下。

    基础铺垫:

    在请求头中使用UUID作为参数可以用于以下情况:

    1. 唯一标识请求:通过将UUID作为请求头中的参数,可以为每个请求分配一个唯一的标识符。这可以帮助服务器端识别和跟踪每个请求,确保请求的唯一性和正确性。
    2. 防止重复请求:通过在请求头中包含UUID参数,可以防止客户端发送重复的请求。服务器端可以检查已接收到的UUID,如果发现重复的UUID,则可以拒绝重复请求或采取相应的处理措施。
    3. 用户身份识别:在某些情况下,UUID可以用作用户的唯一标识符。通过在请求头中携带UUID参数,可以将用户身份与请求关联起来,实现用户的身份验证和授权操作。
    4. 请求跟踪和日志记录:通过在请求头中添加UUID参数,可以帮助在分布式系统中跟踪请求的流程和处理过程。UUID可以用于标识和追踪请求的执行路径,方便日志记录和故障排查。
    uuid库:

    Python的uuid模块是用于生成和操作UUID(Universally Unique Identifier)的模块。UUID是一种标识符,用于在全球范围内唯一地标识信息或实体。

    uuid模块还提供了一些有用的函数和属性,如:

    • uuid.UUID: UUID类,用于表示UUID对象。可以使用它来创建、操作和比较UUID。
    • uuid.UUID.hex: 返回UUID的十六进制字符串表示。
    • uuid.UUID.int: 返回UUID的整数表示。

    uuid模块提供了几种方法来生成不同类型的UUID,包括:

    1. uuid1(node,clock_seq): 基于主机的MAC地址和当前时间生成UUID。这种方法可能会受到安全性和隐私方面的限制。
      • 这个是不断变化的
    import uuid
    # 生成UUID
    uuid_obj = uuid.uuid1() 
    print(uuid_obj)  # 输出UUID对象 7a882786-84f2-11ee-8e61-601895215252
    print(uuid_obj.hex)  # 输出UUID的十六进制表示 7a88278684f211ee8e61601895215252
    print(uuid_obj.int)  # 输出UUID的整数表示     162872769530213458403891555076281553490
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.uuid3(namespace, name): 基于给定的名称和命名空间生成UUID。命名空间可以是UUID或字符串形式。

    该方法接受两个参数:namespacename

    • namespace:命名空间参数可以是UUID对象或字符串形式的UUID。命名空间是用于创建UUID的命名空间标识符。
    • name:名称参数是一个字符串,用于与命名空间一起生成UUID。
    • 产生的的值是固定的
    import uuid
    namespace_uuid = uuid.UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')  # 根据一个字符串撞见UUID对象
    name = 'example'
    uuid_obj = uuid.uuid3(namespace_uuid, name)
    print(uuid_obj) # c5e5f349-28ef-3f5a-98d6-0b32ee4d1743
    print(uuid_obj.hex,len(uuid_obj.hex)) #  c5e5f34928ef3f5a98d60b32ee4d1743 32
    print(uuid_obj.int) # 263051885572091086230243226840799713091
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.uuid4(): 基于伪随机数生成器的随机值生成UUID。这是最常用的生成UUID的方法,32位,没有任何参数。

    • 产生的值不是固定的
    import uuid
    
    uuid_obj = uuid.uuid4()
    print(uuid_obj) # e5980dd7-7449-44df-a2d7-1ac36fd08a31
    print(uuid_obj.int) # 305182720898611654703443082428223097393
    print(uuid_obj.hex,type(uuid_obj.hex),len(uuid_obj.hex)) #e5980dd7744944dfa2d71ac36fd08a31  32 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.uuid5(namespace, name): 方法用于基于给定的名称和命名空间生成UUID,类似于uuid3(),但使用的是SHA-1散列算法。

    它接受两个参数:namespacename

    • namespace:命名空间参数可以是UUID对象或字符串形式的UUID。命名空间是用于创建UUID的命名空间标识符。
    • name:名称参数是一个字符串,用于与命名空间一起生成UUID。
    import uuid
    
    namespace_uuid = uuid.UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')  # 示例命名空间UUID
    name = 'example'
    uuid_obj = uuid.uuid5(namespace_uuid, name)
    print(uuid_obj) # 7cb48787-6d91-5b9f-bc60-f30298ea5736
    print(uuid_obj.hex,type(uuid_obj.hex),len(uuid_obj.hex)) # 7cb487876d915b9fbc60f30298ea5736  32
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    基于java+springmvc+mybatis+vue+mysql的医院设备管理系统
    ElasticSearch-Query DSL(Domain Specific Language)
    1338_龙书笔记_001_编译器的大概结构以及工作的基本流程
    客户端打开浏览器post提交数据
    笔记:Qt开发之定制化qDebug()函数
    Jmeter提取协议报文、请求头、请求体、响应体
    沸点 | Ultipa 图数据库金融应用场景优秀案例首批入选,金融街论坛年会发布
    三战MySQL数据库【终极篇】
    设计模式--模板方法&外观模式
    基于uniapp框架的古汉语学习考试系统 微信小程序python+java+node.js+php
  • 原文地址:https://blog.csdn.net/ak_bingbing/article/details/134458381