【CMDB】API传输验证
客户端向服务器发送请求时,在请求头添加自定义的字符串
客户端的加密方式
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传输验证的更多相关文章
- CMDB API验证
CMDB API验证 为什么做API验证 API验证是防止数据在传输的过程中,保证数据不被篡改 如何设计的API验证 灵感来源于Torando中加密Cookie的源码,主要是生成加密的随机字符串. M ...
- Python API简单验证
前言 因为CMDB内部的需求,需要一个API进行数据传输,用来传递需要抓取的服务端信息信息给抓取的autoclient,autoclient抓取好之后再通过API传输到服务器,保存到数据库.但是为了防 ...
- CMDB资产管理系统开发【day27】:cmdb API安全认证
1.API验证分析 API三关验证 客户端和服务端中都存放一份相同的随机字符串,客户端发请求的时候把随机字符串和当前时间进行MD5加密,同时带着当前时间通过请求头发送到API,进入三关验证. 第一关是 ...
- .net web api 权限验证
做一个登录权限验证. 开始吧. using System; using System.Collections.Generic; using System.Drawing; using System.D ...
- .net core 中api 模型验证
AddControllers/AddMvc方法允许添加自定义ActionFilterAttribute进行过滤 文档中这么定义Filter: 可以创建自定义筛选器,用于处理横切关注点. 横切关注点的示 ...
- 分享api接口验证模块
一.前言 权限验证在开发中是经常遇到的,通常也是封装好的模块,如果我们是使用者,通常指需要一个标记特性或者配置一下就可以完成,但实际里面还是有许多东西值得我们去探究.有时候我们也会用一些开源的权限验证 ...
- api接口验证shal()
就安全来说,所有客户端和服务器端的通信内容应该都要通过加密通道(HTTPS)传输,明文的HTTP通道将会是man-in-the- middle及其各种变种攻击的温床.所谓man-in-the-midd ...
- ASP.NET Web API 安全验证之摘要(Digest)认证
在基本认证的方式中,主要的安全问题来自于用户信息的明文传输,而在摘要认证中,主要通过一些手段避免了此问题,大大增加了安全性. 1.客户端匿名的方式请求 (无认证) HTTP/ Unauthorized ...
- API接口验证
一.前言 权限验证在开发中是经常遇到的,通常也是封装好的模块,如果我们是使用者,通常指需要一个标记特性或者配置一下就可以完成,但实际里面还是有许多东西值得我们去探究.有时候我们也会用一些开源的权限验证 ...
随机推荐
- 二代身份Zheng复印(手机正反面拍照生成1:1复印件图像)
下载地址 2017年7月28日 1.支持文字水印:2.优化程序,修复Bug:3.升级版本为1.1. 2017年7月17日1.二代身份*证正面(白色按钮).反面(蓝色按钮)拍摄后,退出APP自动生成A4 ...
- C++内存管理1-64位系统运行32位软件会占用更多的内存吗?
随着大容量内存成为电脑平台常规化的配置,在配置组装机时很多的用户都会选择8GB甚至是16GB的容量规格内存使用在自己的机器上,如果要将这8GB甚至是16GB的内容在系统使用时能充分利用起来的话,你平台 ...
- LwIP应用开发笔记之四:LwIP无操作系统TFTP服务器
前面我们已经实现了UDP的回环客户端和回环服务器的简单应用,接下来我们实现一个基于UDP的简单文件传输协议TFTP. 1.TFTP协议简介 TFTP是TCP/IP协议族中的一个用来在客户机与服务器之间 ...
- Spring MVC -- 单元测试和集成测试
测试在软件开发中的重要性不言而喻.测试的主要目的是尽早发现错误,最好是在代码开发的同时.逻辑上认为,错误发现的越早,修复的成本越低.如果在编程中发现错误,可以立即更改代码:如果软件发布后,客户发现错误 ...
- Centos7.3之K8S安装初体验
容器是发展趋势,所以是时候从虚拟机中脱离出来,投入到容器化的怀抱中了. 曾经试过安装k8s,都没有成功,各种乱七八糟的报错,于是一拖再拖,这次总算发现一个可以快速部署的工具,终于安装成功了. 这个k8 ...
- Javascript / Nodejs call 和 apply
call: 改变了函数运行的作用域,即改变函数里面this的指向apply:同call,apply第二个参数是数组结构 例如: this.name = 'Ab'var obj = {name: 'BB ...
- Java分布式:分布式锁之Zookeeper
Java分布式:分布式锁之Zookeeper 分布式锁系列教程重点分享锁实现原理 引入ZooKeeper ZooKeeper是什么呢? ZooKeeper 是一个开源的分布式协调服务,它可以在分布式系 ...
- SonarQube - 安装与运行SonarQube
1 - 下载SonarQube SonarQube有多个版本,其中CE(Community Edition)版本免费开源,其余的开发者版本.企业版本和数据中心版本都是收费版本. 官网下载:https: ...
- 删除lvm时出现"Logical volume contains a filesystem in use"
问题描述: k8s环境中需要重新创建lvm:/dev/mapper/test-vg-test-storage,该lvm挂载在/data/prometheus下面,在删除出现"Logical ...
- DS博客作业07--查找
1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 本周要求挑3道题目写设计思路.调试过程.设计思路用伪代码描述.题目选做要求: 原则上题 ...