• 探索请求头中的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
  • 相关阅读:
    北大肖臻老师《区块链技术与应用》系列课程学习笔记[25]以太坊-智能合约-5
    source命令执行sql脚本在DOS界面出现中文乱码问题
    ESP32 系列之 ESP-IDF 官方构建方案
    ES全文检索支持繁简和IK分词检索
    Rust所有权及引用
    Web渗透_SQL注入1
    Jetson Xavier NX 试玩 (二)
    计算机设计大赛 题目: 基于深度学习的疲劳驾驶检测 深度学习
    金仓数据库 Pro*C 迁移指南(3. KingbaseES Pr*oc 对 Oracle Pro*c 的兼容)
    如何在idea中新建第一个java小程序
  • 原文地址:https://blog.csdn.net/ak_bingbing/article/details/134458381