【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接口验证
一.前言 权限验证在开发中是经常遇到的,通常也是封装好的模块,如果我们是使用者,通常指需要一个标记特性或者配置一下就可以完成,但实际里面还是有许多东西值得我们去探究.有时候我们也会用一些开源的权限验证 ...
随机推荐
- 014-交互式Shell和shell脚本获取进程 pid
Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程 1.交互式 Bash Shell 获取进程 pid 在已知进程名(name)的前提下,交互式 ...
- DLL注入实践
Windows系统大量使用dll作为组件复用,应用程序也会通过dll实现功能模块的拆分.DLL注入技术是向一个正在运行的进程插入自有DLL的过程. Window下的代码注入 常见的Windows代码注 ...
- 在条件判断中使用 all() / any()
在条件判断中使用 all() / any() all() 和 any() 两个函数非常适合在条件判断中使用.这两个函数接受一个可迭代对象,返回一个布尔值,其中: all(seq):仅当 seq 中所有 ...
- Houdini Python开发实战 课程笔记
P2 + P3 + P4 + P5 - 基础: 1. Houdini中使用Python的地方 2. Textport:可使用cd.ls等路径操作的命令(命令前加%,可在python中使用) 3. So ...
- django缓存相关
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39726347/articl ...
- SpringBoot应用部署到Docker上(docker-io版本)
配置TCP远程连接 为什么要配置这个呢,因为用到的docker-maven-plugin插件默认连接到localhost:2375上的docker.然而:1. 我们的Docker不在本地,执行打包命令 ...
- SSM学习系列
Spring+SpringMVC+MyBatis Spring+SpringMVC+MyBatis深入学习及搭建(一)——MyBatis的基础知识 Spring+SpringMVC+MyBatis深入 ...
- [Linux] 在 Ubuntu 19.10 上开启 SSH 服务并允许远程登录
在 Ubuntu 19.10 上安装 SSH,并开启服务 0.检查并确认系统当前是否已安装SSH: sudo ps -e | grep ssh 如果只有 ssh-agent 说明 ssh-server ...
- DBCP(MySql)+Servlet+BootStrap+Ajax实现用户登录与简单用户管理系统
目 录 简介 本次项目通过Maven编写 本文最后会附上代码 界面截图 登录界面 注册界面 登录成功进入主页 增加用户操作 删除用户操作 修改用户操作 主要代码 Dao层代码 DBCP代码 Se ...
- Python使用Django创建第一个项目
一 必要环境安装 1首先确保安装了Python3,在此使用的系统为Ubuntu @ubuntu:~$ python3 Python 3.6.7 (default, Oct 22 2018, 11:32 ...