Ai
101 Star 1.4K Fork 437

lybbn/django-vue-lyadmin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
apisecurity.py 2.43 KB
一键复制 编辑 原始数据 按行查看 历史
# -*- coding: utf-8 -*-
"""
@Remark: 接口安全(接口数据校验)
"""
import time
from utils.jsonResponse import SuccessResponse,ErrorResponse
from utils.common import ly_md5
from django_redis import get_redis_connection
key = 'lybbn_sxfwanwlaqwanctcswan999666'
visited_keys = {
#"332d3ddklllskkdwwwiissswewsw":时间
}
"""
使用方法,一般使用@ly_api_security,如果是drf中需要
from utils.apisecurity import ly_api_security
from django.utils.decorators import method_decorator
然后再具体的请求方法前面如get、post前面添加:@method_decorator(ly_api_security)
客户端需要在http头部添加auth-api头部字段
"""
#接口安全装饰器
def ly_api_security(func):
def inner(request,*args,**kwargs):
server_float_time = time.time()
try:
auth_header = request.META.get('HTTP_AUTH_API')
# 332d3ddklllskkdwwwiissswewsw|1632392265.7424471|13234
if not auth_header:
return ErrorResponse(msg='缺少认证头部信息')
client_md5,client_time,random_str = auth_header.split('|',maxsplit=2)
except Exception as e:
return ErrorResponse(msg="接口安全校验值错误")
client_float_time = float(client_time)
if len(random_str) !=5:
return ErrorResponse(msg="第五个字段只能为5位")
#第一重验证(时间校验)
if(client_float_time +200) < server_float_time:
return ErrorResponse(msg='接口校验时间过期')
#第二重验证(md5校验)
server_md5 = ly_md5("%s|%s|%s"%(key,client_time,random_str))
if server_md5 != client_md5:
return ErrorResponse(msg='接口加密校验失败')
# #第三重验证(第几次访问校验)采用本地字典验证
# if visited_keys.get(client_md5):
# return ErrorResponse(msg='该校验头部您已经使用过,请使用新的校验信息')
# visited_keys['client_md5'] = client_float_time
#第三重验证(第几次访问校验)采用redis验证(增加md5+ip方式存储解决不同ip下的并发访问问题)
client = get_redis_connection('authapi')
if client.get(client_md5):
return ErrorResponse(msg='该校验头部您已经使用过,请使用新的校验信息')
client.set(client_md5,client_float_time,ex=86400)#1天有效期
return func(request,*args,**kwargs)
return inner
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/lybbn/django-vue-lyadmin.git
git@gitee.com:lybbn/django-vue-lyadmin.git
lybbn
django-vue-lyadmin
django-vue-lyadmin
master

搜索帮助