OTP防重放攻击

OTP本意是一次性口令,比如邮箱验证码,短信验证码,或者根据totp或者hotp生成的默认30秒一变的6位数字。
不过开发者要注意,必须要在验证成功后失效那个验证码,不然就会导致重放攻击。
对于邮箱验证码,服务器可将邮箱和验证码存入json数组中或redis中,验证时查找匹配,成功则删除该项,一般还应配置失效时间。
对于手机验证码,服务器要将手机号和验证码存入json数组中或redis中,验证时查找匹配,成功则删除该项,一般还应配置失效时间。
对于动态口令,则要采用另外的方式:
先准备一个历史成功json数组,每项是一条json,包含用户id,token,验证时刻+禁止重复的时长
每验证成功一条用户和动态口令,则查数据是否有相同id,相同token并且验证时间还在禁止时间段内,如果查到,则认定为重放攻击,记录日志,验证不通过
如果没有查到,那么如果该用户历史列表为空,则添加json记录,否则更新替换记录的token和验证时刻+禁止重复时长。
注意一般动态口令验证会有一个允许的窗口数,以平衡用户时间和服务器时间的差异,这些前后窗口内的token值在当前验证仍然是可以通过的,所以禁止重复时长至少要覆盖之后的窗口时长。如果token时长是30秒,窗口是2,那么禁止重复时长应该设置为90秒。
如果用户数量大,嫌内存空间占用多,可以考虑每次计算时删除已经过期的条目,或者使用redis,在添加记录时定义失效时间。

...
var loginfaillist=[];
var userotpsucclist=[];
...if (tokenValidates) {let histmatch=userotpsucclist.find(item=>((item.userid==matchuser.uid.toLowerCase())&&(item.token==obj.token)&&(item.invalid>now)))if (histmatch!=undefined) {addfail(now,clientip);logger.error("涉嫌重放攻击 "+obj.email); errlog("涉嫌重放攻击 "+obj.email);return res.json({ "msg":"涉嫌重放攻击"});}histmatch=userotpsucclist.find(item=>(item.userid==matchuser.uid.toLowerCase()))if (histmatch==undefined) userotpsucclist.push({"userid":matchuser.uid.toLowerCase(),"token":"obj.token","invalid":now+200000})else { histmatch.token=obj.token; histmatch.invalid=now+200000; }loginfaillist=loginfaillist.filter(itm=>(itm.ip!=req.ip));logger.info("认证通过 "+matchuser.username+" "+clientip);res.json({"msg":"succ","userid":matchuser.uid.toLowerCase(),"username":matchuser.username});}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

彻底开源,免费商用,上海AI实验室把大模型门槛打下来

终于,业内迎来了首个全链条大模型开源体系。 大模型领域,有人探索前沿技术,有人在加速落地,也有人正在推动整个社区进步。 就在近日,AI 社区迎来首个统一的全链条贯穿的大模型开源体系。 虽然社区有LLaMA等影响力较大…

从 ArcMap 迁移到 ArcGIS Pro

许多 ArcMap 用户正在因 ArcGIS Pro 所具有的现代 GIS 桌面工作流优势而向其迁移。 ArcGIS Pro 与其余 ArcGIS 平台紧密集成,使您可以更有效地共享和使用内容。 它还将 2D 和 3D 组合到一个应用程序中,使您可以在同一工程中使用多个地图和多个布局。 Arc…

【C++杂货铺】C++11新特性

目录 🌈 前言🌈 📁 C11介绍 📁 统一初始化列表 📁 声明 📂 auto 📂 decltype 📂 返回类型后置 📂 范围for 📂 模板别名 📂 nullptr &#x1…

服务器使用PC作为代理访问外网

1、PC上启动代理,比如nginx 下载nginx:http://nginx.org/en/download.html 修改配置文件,在conf下: http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server…

六、 SpringBoot 配置⽂件 ★ ✔

六、 SpringBoot 配置⽂件 本节⽬标1. 配置⽂件作⽤2. 配置⽂件快速⼊⼿3. 配置⽂件的格式4. properties 配置⽂件说明4.1 properties 基本语法4.2 读取配置⽂件4.3 properties 缺点分析 5. yml 配置⽂件说明5.1 yml 基本语法5.2 yml 使⽤进阶5.2.1 yml 配置不同数据类型及 nul…

昇思25天学习打卡营第17天|文本解码原理--以MindNLP为例

文本解码就是根据当前已经输入的内容不断地预测下一个词,前期通过大量的文本文章等输入,让模型学习好以后,根据已学习的内容,不断预测下一个词。就像鹦鹉学舌一样你不断的叫他说你好大帅哥,你好大帅哥。后面某一天&…

好用的源代码加密软件有哪些?5款源代码防泄密软件推荐

源代码作为软件产品的核心组成部分,其安全性直接关系到整个软件系统的安全。源代码的泄露可能导致企业的技术秘密暴露,商业竞争力下降,甚至可能引发经济损失和法律责任问题。因此,对源代码进行加密保护,已经成为企业不…

windows安装启动mysql8.0版本的简单流程

1.下载mysql8.0.25版本 MySQL :: Download MySQL Community Server (Archived Versions) 2.解压到D盘的mysql文件夹,并修改环境变量 配置环境变量: winr键>输入control system>高级系统设置>点击环境变量 双击path后,新建 将bin目录粘贴进去,再点击确定 在cmd命令行…

【JavaScript 报错】未定义的变量或函数:Uncaught ReferenceError

🔥 个人主页:空白诗 文章目录 一、错误原因分析1. 变量未定义2. 函数未定义3. 块级作用域问题 二、解决方案1. 确保变量已定义2. 确保函数已定义3. 正确使用块级作用域 三、实例讲解四、总结 在JavaScript开发中,Uncaught ReferenceError 是一…

C#使用异步方式调用同步方法的实现方法

使用异步方式调用同步方法,在此我们使用异步编程模型(APM)实现 1、定义异步委托和测试方法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Task…

算法学习day10(贪心算法)

贪心算法:由局部最优->全局最优 贪心算法一般分为如下四步: 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 一、摆动序列(理解难) 连续数字之间的差有正负的交替&…

Maven Nexus3 私服搭建、配置、项目发布指南

maven nexus私服搭建 访问nexus3官方镜像库,选择需要的版本下载:Docker Nexus docker pull sonatype/nexus3:3.49.0 创建数据目录并赋权 sudo mkdir /nexus-data && sudo chown -R 200 /nexus-data 运行(数据目录选择硬盘大的卷进行挂载) …

mysql快速精通(五)数据库备份与还原

主打一个实用 对于重要数据我们常常进行备份以应对突发情况,以下使用Navicat对数据进行备份,想了解sql语句的自寻 备份⬇️ 还原⬇️

自动化回复信息工具的开发分享!

在当今信息爆炸的时代,无论是个人还是企业,都面临着大量的信息处理和回复工作,为了提高效率,自动化回复信息工具变得越来越重要。 本文旨在分享一个简单但实用的自动化回复信息工具的五段源代码开发过程,帮助读者理解…

DNS正向解析,反向解析

目录 一、正向解析 1.下载DNS软件包 2.修改主配置文件 3.创建区域文件 4.配置DNS 5.测试 二、反向解析 1.修改主配置文件 2.创建区域文件 3.测试 一、正向解析 1.下载DNS软件包 [rootwww ~]# yum indtall -y bind注意: 下载软件前需要配置仓库&…

DolphinScheduler本地安装部署与远程任务调度管理实践应用

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问,结合内…

自动驾驶AVM环视算法--540度全景的算法实现和exe测试demo

参考:金书世界 540度全景影像是什么 540度全景影像是在360度全景影像基础上的升级功能,它增加了更多的摄像头来收集周围的图像数据。通常,这些摄像头分布在车辆的更多位置,例如车顶、车底等,以便更全面地捕捉车辆周围…

无人机游学技术及前景分析

一、技术概述 无人机,即无人驾驶飞行器,通过远程控制或自主飞行控制系统进行操作。随着科技的快速发展,无人机技术日益成熟,不仅广泛应用于军事侦察、打击等领域,也逐渐渗透到民用市场,包括农业植保、影视…

PostgreSQL17索引优化之支持并行创建BRIN索引

PostgreSQL17索引优化之支持并行创建BRIN索引 最近连续写了几篇关于PostgreSQL17优化器改进的文章,其实感觉还是挺有压力的。对于原理性的知识点,一方面是对这些新功能也不熟悉,为了尽可能对于知识点表述或总结做到准确,因此需要…

华为认证试题有题库吗?华为认证题库怎么领取?

在竞争激烈的就业环境下,若你拥有华为认证将可以提高个人综合能力,更好的适应行业变化。相信大家都有听说过想考取华为初级认证并不困难,因为它有专门的题库供考生备考。 那么,到底华为认证试题有题库吗?华为认证题库要怎么领取…