zoukankan      html  css  js  c++  java
  • Django学习手册

    原理分析:

      API接口验证

      1.一个认证的key server端 和 client端都必须有这么一个认证key。

      2.认证登录的时间限定

      3.保存已验证的信息,在以后的验证不能再次登录

    client 端:

    import requests
    import hashlib
    import time
    
    # 基于验证的key
    au_key = "dawefgdsfsafdsadas"
    
    # 基于验证的时间
    au_time = time.time()
    
    # 将验证的key与时间合并成一个字符
    au_key_time = "%s|%s"%(au_key,au_time)
    
    # 将合并的字符进行MD5加密
    m = hashlib.md5()
    m.update(bytes(au_key_time,encoding='utf-8'))
    authkey = m.hexdigest()
    
    # 将生成加密的 KEY 与 时间传递至服务端
    url = "http://127.0.0.1:8000/index/"
    data = {"a":1,'b':"2",'c':3,'d':4}
    headers = {'authkey':authkey,'autime':str(au_time)}
    
    a = requests.post(url=url,data=data,headers=headers)
    print(a.text)

    server 端views:

    from django.shortcuts import render,HttpResponse
    import hashlib
    import time
    # Create your views here.
    
    au_list = []
    
    def index(request):
    
        # 与client端一致的验证key
        au_key = "dawefgdsfsafdsadas"
        # 从请求头中取出client端 加密前的时间
        client_au_time = request.META['HTTP_AUTIME']
    
        # 将服务端的key 与 client的时间合并成字符
        server_au_key = "%s|%s" % (au_key, client_au_time)
    
        # 然后将字符也同样进行MD5加密
        m = hashlib.md5()
        m.update(bytes(server_au_key, encoding='utf-8'))
        authkey = m.hexdigest()
    
        # 取出client端加密的key
        clint_au_key = request.META['HTTP_AUTHKEY']
    
    
        # 三重验证机制
    
        # 1.超出访问时间5s后不予验证通过。
        server_time = time.time()
        if server_time - 5 > float(client_au_time):
            return HttpResponse("超时!")
    
        # 2.服务端加密的key值 跟 client发过来的加密key比对是否一致?
        if authkey != clint_au_key:
            return HttpResponse("验证失败!")
    
        # 3.比对当前的key值是否是以前访问过的,访问过的也不予验证通过。
        if authkey in au_list:
            return HttpResponse("验证码已过期")
    
        # 将成功登陆的key值保存在列表中。
        au_list.append(authkey)
    
        return HttpResponse("OK")
  • 相关阅读:
    Topics
    telnetlib-telnet客户端操作
    logging-日志信息管理
    B.2 工具spy++
    B.1 XPath 获取技巧
    pyinstaller-将Python程序打包成一个独立可执行软件包
    探讨HTTP中敏感数据的安全性传输方案
    shell->一个经典的shell脚本结构
    c->再次封装已有函数的快速方法
    c->推荐的更安全的代码写法
  • 原文地址:https://www.cnblogs.com/Anec/p/10058430.html
Copyright © 2011-2022 走看看