客户端向服务器发送请求时,在请求头添加自定义的字符串

客户端的加密方式

1.对key+time进行md5加密

2.发送的时候的格式为md5_key|time,将时间也发送过去

服务器端验证

1.获取加密的字符串,md5_key | time

2.判断时间time是否超时

3.验证md5_key

4.判断md5_key 在短时间内是否访问过,用redis,访问过则不通过

client

import time
import hashlib
import requests # 每台client都有一个key,跟server对应
ENCRYPTION_KEY= 'abcdedf' now_time = time.time()
# key的格式定义
key = "%s|%s" %(ENCRYPTION_KEY ,now_time)
# md5加密
md5 = hashlib.md5()
md5.update(key.encode('utf-8'))
new_key = md5.hexdigest()
# 发送加密字符串的格式
send_key = "%s|%s" %(new_key ,now_time)
headers = {"clientkey" :send_key}
print(headers)
r = requests.get("http://127.0.0.1:8000/api/asset.html",headers=headers)
print(r.text)

server

import time
from functools import wraps
from django.conf import settings
import hashlib key_dict = {}
# Create your views here.
def check_key(func):
@wraps(func)
def inner(request):
accept_key = request.META.get("HTTP_CLIENTKEY", None)
if not accept_key:
return HttpResponse("非法链接")
else:
now_time = time.time()
old_md5_key, old_time = accept_key.split('|')
float_old_time = float(old_time)
# 判断时间是否超时
if now_time - float_old_time > 10:
return HttpResponse("超时")
else:
# 判断md5是否正确
key = "%s|%s" % (settings.AC_KEY, old_time)
md5 = hashlib.md5()
md5.update(key.encode('utf-8'))
new_md5_key = md5.hexdigest()
if new_md5_key != old_md5_key:
return HttpResponse("加密的key有误")
# 循环字典,删除超过10秒的key
for t in list(key_dict.keys()):
if now_time - key_dict[t] > 10:
del key_dict[t] # 判断10秒内是否访问过
if old_md5_key in key_dict:
return HttpResponse("已经访问过")
key_dict[old_md5_key] = now_time
r = func(request)
return r
return inner

【CMDB】API传输验证的更多相关文章

  1. CMDB API验证

    CMDB API验证 为什么做API验证 API验证是防止数据在传输的过程中,保证数据不被篡改 如何设计的API验证 灵感来源于Torando中加密Cookie的源码,主要是生成加密的随机字符串. M ...

  2. Python API简单验证

    前言 因为CMDB内部的需求,需要一个API进行数据传输,用来传递需要抓取的服务端信息信息给抓取的autoclient,autoclient抓取好之后再通过API传输到服务器,保存到数据库.但是为了防 ...

  3. CMDB资产管理系统开发【day27】:cmdb API安全认证

    1.API验证分析 API三关验证 客户端和服务端中都存放一份相同的随机字符串,客户端发请求的时候把随机字符串和当前时间进行MD5加密,同时带着当前时间通过请求头发送到API,进入三关验证. 第一关是 ...

  4. .net web api 权限验证

    做一个登录权限验证. 开始吧. using System; using System.Collections.Generic; using System.Drawing; using System.D ...

  5. .net core 中api 模型验证

    AddControllers/AddMvc方法允许添加自定义ActionFilterAttribute进行过滤 文档中这么定义Filter: 可以创建自定义筛选器,用于处理横切关注点. 横切关注点的示 ...

  6. 分享api接口验证模块

    一.前言 权限验证在开发中是经常遇到的,通常也是封装好的模块,如果我们是使用者,通常指需要一个标记特性或者配置一下就可以完成,但实际里面还是有许多东西值得我们去探究.有时候我们也会用一些开源的权限验证 ...

  7. api接口验证shal()

    就安全来说,所有客户端和服务器端的通信内容应该都要通过加密通道(HTTPS)传输,明文的HTTP通道将会是man-in-the- middle及其各种变种攻击的温床.所谓man-in-the-midd ...

  8. ASP.NET Web API 安全验证之摘要(Digest)认证

    在基本认证的方式中,主要的安全问题来自于用户信息的明文传输,而在摘要认证中,主要通过一些手段避免了此问题,大大增加了安全性. 1.客户端匿名的方式请求 (无认证) HTTP/ Unauthorized ...

  9. API接口验证

    一.前言 权限验证在开发中是经常遇到的,通常也是封装好的模块,如果我们是使用者,通常指需要一个标记特性或者配置一下就可以完成,但实际里面还是有许多东西值得我们去探究.有时候我们也会用一些开源的权限验证 ...

随机推荐

  1. 关于SET QUOTED_IDENTIFIER {ON|OFF}的问题

    SQL SERVER的联机丛书的解释:“当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔.当 SET QUOTED_IDENTIFIER 为 ...

  2. PHP防止sql语句注入终极解决方案(包含pdo各种操作使用实例)

    PHP防止sql语句注入终极解决方案完美解决方案就是使用拥有Prepared Statement机制(预处理sql)的PDO //先做个实验 先不用预处理sql写法<pre><?ph ...

  3. Python Number(数字)

    Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建: A ...

  4. Navicat 创建oracle表空间、新建用户、授权

    1.利用数据库管理员账号:SYSTEM,再配合数据库管理口令,连接Oracle数据库. 登录界面: 2.创建表空间文件 进入如下界面 进入如下界面 弹出如下界面,输入表空间名称 最终结果:  2 .新 ...

  5. 对javascript中call()方法的理解

    call ( thisObj [, arg1 [, arg2 [,  [, argN] ] ] ]) call()方法:官方介绍是,调用一个对象的一个方法,以另一个对象替换当前对象. call()方法 ...

  6. Java多线程编程(3)--线程安全性

    一.线程安全性   一般而言,如果一个类在单线程环境下能够运作正常,并且在多线程环境下,在其使用方不必为其做任何改变的情况下也能运作正常,那么我们就称其是线程安全的.反之,如果一个类在单线程环境下运作 ...

  7. LInux基础(04)项目设计一(理解链表管理协议的代码架构)

    要设计好一个项目必须要有一个健全的代码框架 一个结构体内有数据域和处理数据的函数指针, 先实现管理链表的函数 增加节点  删除节点  清空链表  遍历节点对每个节点进行操作 再实现协议的注册 把对象s ...

  8. golang笔记之DOS篇

    Dos的常用命令 dos的基本介绍     Dos: Disk Operating System 磁盘操作系统  ,简单说一下Windows下的目录 2. dos的基本操作原理   目录的操作: md ...

  9. vue3 createComponent

    这个函数不是必须的,除非你想要完美结合 TypeScript 提供的类型推断来进行项目的开发. 这个函数仅仅提供了类型推断,方便在结合 TypeScript 书写代码时,能为 setup() 中的 p ...

  10. 【写法】为什么if判断中,值要倒着写

    =============================================== 2019/8/27_第1次修改                       ccb_warlock == ...