首页 > 其他分享 >短信验证码登录接口,如何防止恶意攻击

短信验证码登录接口,如何防止恶意攻击

时间:2024-04-28 21:56:55浏览次数:23  
标签:手机号 登录 短验 验证码 接口 恶意 key

本文相关词汇:

OTP - One-Time Password 一次性动态密码,这种验证码具有时效性,通常有效期在1~2分钟内。手机短信验证码就是一种OTP。

MFA - 多重因子认证。先说单因子认证,我们的系统登录通常是 账密登录,这种就是 单因子认证方式的登录。现在为了安全,许多网站开始使用双因子认证登录。

双因子认证-TFA 或 2FA,如 账密+手机号,如账密+滑块,等。

TOTP - TOTP, 基于时间算法的一次性动态码,是一次性动态码的一种实现方式。

captcha-通俗的含义是验证码。captcha是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写。也是系统安全层面的东西。

JWTToken -JWT令牌/JwtToken, json web token。

 

 

 

现在移动应用通常都支持手机短信验证码登录(下文称“短验登录”),对于终端用户来说,这是比较便捷的登录方式。

短验登录的交互很简单。前端页面 输入手机号,点击获取验证码,然后输入收到的短信验证码,点击登录,完成应用的登录。

那么,对于后端,不外乎提供2个API。一个是获取验证码接口,一个是短验登录接口。

 

再具体一些,后端这2个接口,我们来设计一下。

1. 获取验证码接口。 入参是 手机号,返参 主要是一组 code/msg。

程序逻辑是 先验证手机号在系统里是否存在,不存在直接返回code为错误码。手机号存在后,利用一定算法生成一个6位数的一次性动态码,以手机号作为key设置redis缓存,然后向手机号发送短信,返回 code=200 的正常响应。

2. 短验登录接口。入参是 手机号、短信验证码,返参 除了 code/msg 外,还包括 用户的关键属性。

程序逻辑是 以手机号为key读取redis缓存,验证 入参验证码 是否与缓存一致,不一致直接返回code为错误码。验证码正确后,获取用户信息,保存登录session,或生成token,返回 code=200、sessionId以及用户的关键属性。

 

OK,接下来,我要说的是,从软件系统安全层面来考虑,如何保证 短验接口 的安全。就是说,如果我们单单按照上面设计的 短验登录 来实现我们的代码逻辑,那么,当恶意攻击者 伪造入参数据,不断攻击我们这个接口,我们岂不是一直持续不断地访问redis?

 

这显然不太好。

 

那么,从程序设计的角度,如何优化 短验登录接口 呢?

 

大家很快能想到一种方式, 获取验证码接口 多返回一个 key,后面请求 短验登录接口 时,携带这个 key, 服务端程序先校验key,key校验通过后,才走后续 短验登录 逻辑。

 

这里存在一个问题:短验接口 如何识别这个 key 的合法性呢? 

让服务端保存 key 吗?保存 key 岂不是依然绕不开 redis 等中间件吗?(注意:我的前提是:服务端程序是集群部署,非单点)

 

那么,该怎么优化呢?

只要思想不滑坡,办法总比困难多。

(未完待续)

 

 

 

后附:

短信验证码接口防恶意攻击短信防盗刷策略

标签:手机号,登录,短验,验证码,接口,恶意,key
From: https://www.cnblogs.com/buguge/p/18164572

相关文章

  • 接口规范
    需要注意兼容php、java等多语言,即弱类型+强类型如返回user_name字符串类型,就不能查询失败返回null 返回json格式codeint格式msgstring格式data根据接口不同返回不同格式一般是对象或者数组,如果不需要使用data,可以返回null(默认null) php创建对象$obj=newstdClas......
  • Python-PyQt5接口压测工具分享
    1、页面介绍  2、运行效果 ......
  • C#身份查验接口、身份证文字识别接口、金融身份验证
    针对金融领域远程自主开户的实名认证,翔云人工智能开放平台提出了有针对性的解决方案。翔云实名认证API其中包含了身份证实名认证、人脸识别、人证合一和银行卡实名认证,可快速识别提取用户身份信息,实时联网权威数据源进行用户身份的验证,既解决了远程身份认证问题,也避免了身份被......
  • .net core,.net 6使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问we
    1.使用soapCorenuget包 2.新建接口及实现2.1新建接口 2.2新建实现 2.3新建接收实体 2.4返回实体 3.接口注入使用  4.启动程序,直接访问对应的asmx地址  ......
  • FBWF(File-Based Write Filter)是Windows操作系统中的一种功能,主要用于保护系统的存储设
    FBWF(File-BasedWriteFilter)是Windows操作系统中的一种功能,主要用于保护系统的存储设备(如硬盘)免受意外写入或恶意软件的影响。它通过将所有对存储设备的写操作重定向到一个临时缓存中,从而保护存储设备的内容不被修改。FBWF的主要优点包括:简化系统管理:可以在不影响系统运行......
  • 如何写接口设计文档?
    小系统或单个模块的设计文档一、「一句话描述」的标题文件名或标题最好使用「一句话描述」,如:观测云新Event数据结构及处理逻辑设计观测云云关联处理逻辑设计二、业务流程对业务流程进行描述,具体写明「用户做了什么操作,系统进行了什么处理,最后发生了什么」。一般是流程图......
  • 短视频开发,如何用Java实现短信验证码?
    背景Java是一种短视频开发时比较流行的编程语言,验证码是一种常用的网络安全技术。Java发展至今,网上也出现了各种各样的验证码,本人初学Java,下面是我用Java实现短信验证码的总结。截图展示实现代码短视频开发后台接收前台的kgCaptchaToken进行验证,验证成功执行成功......
  • 双向循环链表接口设计
    /***************************************************filename:DoubleDoubleCirLkList.c*author:[email protected]*date:2024/04/25*brief:通过构建双向循环链表学习顺序存储*note:None**CopyRight(c)2024momolyl@126......
  • 对象存储服务中对象业务的非标接口
    本文中讨论的对象存储服务及接口,主要和AWSS3对标。AWSS3提供的对象存储业务,与传统的POSIX规范相比,舍弃了很多特性,比如:文件类型硬链接软链接目录文件相关的操作追加写随机写截断修改名称目录相关的操作创建目录修改名称删除目录元数据时间crtime即......
  • 使用restful请求华三模拟器上的设备接口数据
    一、resful介绍RESTful采用C/S模型。RESTful客户端为使用Python、Ruby或Java等编程语言开发出的RESTful客户端程序或脚本。RESTful服务器为网络设备。通过RESTful功能配置和维护设备的过程为:(1)客户端向服务器发送HTTP/HTTPS请求报文,通过HTTP的方法来操作指定的RESTfulAPI......