短信接口被恶意调用?企业短信防火墙+【中昱维信】短信验证码【Java】

短信接口被恶意调用?企业短信防火墙+【中昱维信】短信验证码【Java】

  • 一、企业短信防火墙的实现
    • 1.1 简介
    • 1.2 第一步:获取防火墙帐号密钥
    • 1.3 第二步:下载防火墙服务器
    • 1.4 第三步:业务系统前后端接入
    • 1.5丰富可视化实时风险大盘,
  • 二、短信验证码的实现
    • 2.1 简介
    • 2.2 短信服务商接入

一、企业短信防火墙的实现

1.1 简介

新昕科技在交易反欺诈核心上, 通过AI快速学习机制,结合国际领先的设备指纹技术,首次推出无需图形验证码机制的企业短信防火墙,三步完成下载对接。
在这里插入图片描述

1.2 第一步:获取防火墙帐号密钥

进入 防火墙控制台,在左侧导航栏选择【网站管理】,进入网站管理页面,单击【发到邮箱】接收密钥。
在这里插入图片描述

1.3 第二步:下载防火墙服务器

前往新昕科技官网,在顶部导航栏选择【解决方案】>【下载中心】,进入下载中心页面,找到短信防火墙服务器安装包,点击【下载链接】即可下载。

1.4 第三步:业务系统前后端接入

web 前端接入:
前端接入:
Web前端接入文档
Java 在页面合适的位置(标签内)加入以下代码引入JS文件:

<script type="text/javascript" src="/NxtJsServlet"></script>

后端接入:
Java
修改配置(和业务系统同系统不需要修改):
newxtc.ini (存放位置:"/WEB-INF/classes/newxtc.ini")
修改参数(fireWareUrl)–> fireWareUrl=http://localhost:7502
短信下发

public RetMsg smsSend(HttpServletRequest request, HttpServletResponse response, String clientMobile) {RetMsg retMsg = new RetMsg(-1, "系统异常");FwClient fwClient = new FwClientImpl();try {// 1 调用【短信防火墙】短信发送请求HashMap < String, Object > paramMap = fwClient.getSendReq(request, clientMobile);String jsonReq = fwClient.execReq(paramMap);String smsSendRet = fwClient.getRetVaule(jsonReq, "riskResult");if("REJECT".equals(smsSendRet)) {retMsg.setRet(3);retMsg.setMsg("请求过于频繁");}else {// 业务 TODO// 业务调用短信接口 TODO// 调用短信接口 结束if(smsRetMsg != null && smsRetMsg.getRet() == 0) {// 2 调用【短信防火墙】成功结果fwClient.execSucc(paramMap);logger.debug("send succ");retMsg.setRet(0);retMsg.setMsg("发送验证码成功");}else {// 2 调用【短信防火墙】失败结果SmsVerifyCache.getInstance().remove(clientMobile);fwClient.execFail(paramMap);retMsg.setRet(-1);retMsg.setMsg("发送验证码失败");}}}catch(Exception e) {for(StackTraceElement elment: e.getStackTrace()) {logger.error(elment.toString());}}return retMsg;
}

短信验证

public RetMsg smsVerify(HttpServletRequest request, HttpServletResponse response, String clientMobile, String smsVerifyCode) {FwClient fwClient = new FwClientImpl();RetMsg retMsg = new RetMsg(-1, "系统异常");if(smsVerifyCode == null || smsVerifyCode.isEmpty()) {retMsg.setRet(1);retMsg.setMsg("输入验证码为空");}else {// 1 调用【短信防火墙】验证请求HashMap < String, Object > paramMap = fwClient.getVerifyReq(request, clientMobile); // 请求防火墙String jsonReq = fwClient.execReq(paramMap);// 报文处理String smsSendRet = fwClient.getRetVaule(jsonReq, "riskResult");if("REJECT".equals(smsSendRet)) {retMsg.setRet(3);retMsg.setMsg("请求过于频繁");}// 业务 TODOif(cacheSmsVerify != null && cacheSmsVerify.getVerifyCode() != null && !cacheSmsVerify.getVerifyCode().isEmpty()) {if(cacheSmsVerify.getVerifyCode().equals(smsVerifyCode)) {retMsg.setRet(0);retMsg.setMsg("验证成功");}else {retMsg.setRet(1);retMsg.setMsg("验证码错误");}}else {retMsg.setRet(-9);retMsg.setMsg("验证码超时");}if(retMsg.getRet() == 0) {// 2 调用【短信防火墙】成功结果fwClient.execSucc(paramMap);}else {// 2 调用【短信防火墙】失败结果fwClient.execFail(paramMap);}}return retMsg;
}

1.5丰富可视化实时风险大盘,

防御拦截数据尽收眼底,实时查看当日数据详情与近期风险趋势。
通过风控数据看板,可查看1-30天的验证情况、风控拦截情况以及验证事件触发的AI模型情况。
进入防火墙控制台,在左侧导航栏选择【风险大盘】,进入风险大盘页面。
在这里插入图片描述

二、短信验证码的实现

2.1 简介

企业防火墙只能防止机器人脚本恶意攻击网站或App,如何识别到是本人操作的,还需要结合短信验证码进一步进行身份识别。本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能。

发送短信验证码的原理是:随机生成一个4-6位数字,将该4-6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较。

一般的第三方短信平台都会有他们自己的短信接口,只要读懂他们的接口稍作稍作改变就能满足自己的需求。

首先将短信平台接口代码列出:这里需要依赖的三个通用jar包 commons-logging-1.1.1.jar,commons-httpclient-3.1.jar,commons-codec-1.4.jar。

2.2 短信服务商接入

开发短信验证码功能通常是采用第三方短信服务商的服务,作为短信下发渠道,以这个网站短信验证码为例:https://www.veesing.com上海中昱文化传播有限公司【简称中昱维信】成立于2010年,是一家从事增值电信业务和软件开发服务的科技企业。获取试用验证码条数和验证码接口文档,进行接口对接前需首先进行准备工作:

短信签名报备

短信验证码需预先设置短信签名,签名会经过平台审核,审核通过后才可作为接口参数使用。
在这里插入图片描述
短信验证码模板报备

短信验证码需预先设置短信模板,签名会经过平台审核,审核通过后才可作为接口参数使用。

获取appId和appKey

为保障接口安全,短信验证码接口,使用多重加密的appId和appKey进行身份鉴权和校验,这两个字段作为验证码接口必填项,建议预先获取到,获取appKey时需要对注册人进行身份校验。

至此,短信服务商验证码接口已经准备完毕,接下来可以进行业务场景,进行短信验证码服务的开发,下面展示通用的短信验证码接入流程。
2.3 短信验证码代码实现

短信验证码前端较为简单,主要就是发送验证码和校验验证码两个ajax请求,结合上面的滑动验证可实现双重验证。前端页面结构如下:

 <html><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"><!-- 国内使用 --><link rel="stylesheet" href="https://cdn.staticfile.org/amazeui/2.7.2/css/amazeui.min.css"><script type="text/javascript" charset="utf-8" src="https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js"></script></head><body><div class="am-form"><div class="am-form-group"><label for="tel">请输入手机号</label><input type="text" class="" id="tel" placeholder="请输入手机号"></div><div id="__nc" style="height: 70px"><div id="nc"></div></div><div class="am-form-group"><label for="code">请输入验证码</label><input id="code" type="text" placeholder="请输入验证码"></div><button type="button" class="am-btn am-btn-primary">提交</button></div><script>var nc_token = ["CF_APP_1", (new Date()).getTime(), Math.random()].join(':');var nc=NoCaptcha.init({renderTo: '#nc',appkey: 'CF_APP_1',scene: 'register',token: nc_token,trans: {"key1": "code200"},elementID: ["usernameID"],is_Opt: 0,language: "cn",timeout: 10000,retryTimes: 5,errorTimes: 5,inline:false,apimap: {// 'analyze': '//a.com/nocaptcha/analyze.jsonp',// 'uab_Url': '//aeu.alicdn.com/js/uac/909.js',},bannerHidden:false,initHidden:false,callback: function (data) {window.console && console.log(nc_token)window.console && console.log(data.csessionid)window.console && console.log(data.sig);var tel = $('#tel').val();$.ajax({url: "sendCode",type: "post",data: {tel:tel},dataType: "json",success: function (result) {if (result.code == 0) {alert("验证码已发送!", "green")} else {alert("发送失败,请稍后再试!");nc.reset()}},error: function () {alert("系统繁忙,请稍后再试!", "red")}})},error: function (s) {}});NoCaptcha.setEnabled(true);nc.reset();//请务必确保这里调用一次reset()方法NoCaptcha.upLang('cn', {'LOADING':"加载中...",//加载'SLIDER_LABEL': "请向右滑动验证",//等待滑动'CHECK_Y':"验证通过",//通过'ERROR_TITLE':"非常抱歉,这出错了...",//拦截'CHECK_N':"验证未通过", //准备唤醒二次验证'OVERLAY_INFORM':"经检测你当前操作环境存在风险,请输入验证码",//二次验证'TIPS_TITLE':"验证码错误,请重新输入"//验证码输错时的提示});</script></body></html>

后端代码主要职责是两方面:1)接收生成验证码请求,生成验证码存入session中;2)接收校验验证码的请求,将存入session的验证码去除,与前端输入的验证码进行比对,比对一致则通过并进行视图转发,比对不一致则告知前端错误原因。主要实现代码如下:

  HttpSession session = req.getSession();// 验证码有效时间session.setMaxInactiveInterval(600);try {Integer num = RandNumber.getNum();//  发送验证码通道Sendsms.Send(num, phone);session.setAttribute(phone, num);return R.ok();} catch (Exception e) {e.printStackTrace();logger.error(e.getMessage());return R.error("fasle");}import java.io.Exception;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.NameValuePair;import org.apache.commons.httpclient.methods.PostMethod;public class Sendsms {private static String Url = "https://vip.veesing.com/smsApi/verifyCode";// 发送短信验证码public static void Send(Integer num, String mobile) {try {HttpClient client = new HttpClient();PostMethod method = new PostMethod(Url);client.getParams().setContentCharset("UTF-8");method.setRequestHeader("ContentType", "application/x-www-form-urlencoded;charset=UTF-8");NameValuePair[] data = { new NameValuePair("appId", "*********"),new NameValuePair("appKey", "**********"), new NameValuePair("templateId", "*******"), new NameValuePair("mobile", "*******"),new NameValuePair("variables", "*******") };method.setRequestBody(data);client.executeMethod(method);String submitResult = method.getResponseBodyAsString();System.out.println(submitResult);} catch (Exception e) {e.printStackTrace();}}}HttpSession session = req.getSession();String yzm = String.valueOf(session.getAttribute(username));logger.info(yzm);if (yzm == null) {return R.error("验证码错误");}if (yzm != null && !verifycode.equals(yzm)) {return R.error("验证码错误");}

以上就是Java实现企业短信防火墙与短信验证码的全部实现,基于此案例,可实现安全性高、用户体验好的登录注册+企业短信防火墙+短信验证码功能。

如有问题可在留言区展开讨论哦,欢迎转发,如有改动请站内信通知本文作者,谢谢!

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

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

相关文章

短信验证码的登录流程

点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复“大礼包”有惊喜礼包&#xff01; 每日英文 Empty heart, is the best gift; alone the way, is the most beautiful scenery. 放空的心&#xff0c;是最好的礼物&#xff1b;独走的路&#xff0c;是最美的风…

App发送短信验证码实现

前言&#xff1a; 现如今&#xff0c;电话是接外卖和快递的&#xff0c;短信是用来收验证码的。那么像一般的App里面使用手机号验证码方式进行注册或登录是怎样实现的呢&#xff1f;这篇文章可能帮到你。 1.寻找合适的短信平台 因为三大运营商的限制摆在那里&#xff0c;凭个人…

GPT+时代来临:OpenAI开放GPT3.5模型,1000token仅1毛钱

GPT3.5 Model API 使用指南 今天OpenAI公司开放了最新的GPT3.5模型&#xff1a;gpt-3.5-turbo&#xff0c;也就是目前网页版的ChatGPT使用的模型。而此前OpenAI开放的最新的模型text-davinci-003则是基于GPT3模型构建的。并且价格十分便宜&#xff1a;1000 token/0.002美元&am…

『2023北京智源大会』开幕式以及基础模型前沿技术论坛

『2023北京智源大会』开幕式以及基础模型前沿技术论坛 文章目录 一. 黄铁军丨智源研究院院长1. 大语言模型2. 大语言模型评测体系FlagEval3. 大语言模型生态(软硬件)4. 三大路线通向 AGI(另外2条路径) 二. Towards Machines that can Learn, Reason, and Plan(杨立昆丨图灵奖得…

超级AI大脑:全能型学习助理

有句话说在知识的海洋里渴死&#xff0c;说的就是面对海量知识不知如何获取 进而可以理解为不知道如何学习 而现在我们迎来了一个超级大脑&#xff0c; 一个几乎帮助你深度学习的全能助理。 你可以询问超级AI大脑任何内容&#xff0c;回答常常会令你惊喜&#xff1a; 文案创作&…

前沿系列--Transform架构[架构分析+代码实现]

文章目录 前言总体架构总体任务使用 输入部分EmbeddingPosition Encodingwhy实现 注意部分注意力机制/自注意力掩码作用如何工作形状解释 完整实现多头注意力实现Norm处理 FeedForward 以及连接编码器解码器中间层组装 输出层模型组装总结 前言 Transform这玩意的大名我想就不…

android 如何修改系统语言

最近有需求需要去编程实现根据选择去修改系统语言, 根据查资料看setting源码有两种方式, 在这里记录一下. 修改系统语言或者控制系统开关机等操作即使声明了对应权限还是会报错, 这是因为这些操作需要系统权限,这里也会介绍如何使用android studio对应用进行系统签名. 一.如何…

goland 界面变成中文 修改回英文界面

新版本会自动装中文插件 主界面 文件->设置 打开 设置对话框 点击 插件 选择已安装 取消勾选 中文插件 确定 重新启动即可 恢复到原始的英文界面

Android多语言切换/适配——以英语为例

近期在做一个背单词APP来作为毕业设计&#xff0c;在app里面想设计一个切换语言为英语的功能&#xff0c;记录一下本次实现的效果以及步骤。 文章目录 实现效果中文模式英文模式 实现原理实现步骤1、创建相关的value文件夹和string.xml文件2、 在对应的string文件中选择合适的翻…

Android 10.0修改语言设置简体中文(中国)为简体中文(中国大陆)

Android Q中 Settings的语言设置选择列表中简体中文下&#xff0c;默认显示为中国、香港、台湾和新加坡&#xff1a; 如果想修改其显示为中国大陆&#xff0c;就必须修改ICU资源的配置。 ICU ICU 是开源项目&#xff0c; 提供了最新的unicode标准&#xff0c;字符集转换&…

设置日语输入法遇到的各种问题

一旦开始学习日语&#xff0c;就忍不住想在自己的电脑上输入日文&#xff0c;按照网上的各种说法&#xff0c;将win10自带的输入法添加了日语的语言包之后&#xff0c;还有各种小问题&#xff0c;于是又在网上各种搜索&#xff0c;花了不少时间。在此整理一下日语输入遇到的各种…

postman设置成中文

介绍: Postman一款非常流行的API调试工具。其实&#xff0c;开发人员用的更多。因为测试人员做接口测试会有更多选择&#xff0c;例如Jmeter、soapUI等。不过&#xff0c;对于开发过程中去调试接口&#xff0c;Postman确实足够的简单方便&#xff0c;而且功能强大。用户在开发…

postman怎么设置中文

很多小伙伴想问postman怎么如何设置中文?&#xff0c;但问题这个小工具没有人开发&#xff0c;期待业内大神开发一个吧。下面给大家分享下postman设置中文遇到的问题&#xff0c;一起来学习下吧。 postman怎么设置中文 postman设置中文方法 1.进入postman官网&#xff0c;可以…

【Android进阶】17、设置中文:语言地区的本地化、国际化

文章目录 为了国际化的需求我们设置中文版和英文版两个版本的 res/values/strings.xml,通过设置地区,让os自动找对应版本。 在 res 下添加 strings.xml,设置 Locale 为中文,效果如下: 生成后的文件如下图: 其实文件放置在 res/values-zh/strings.xml 中,如下: 在 res/…

百模大战,谁是下一个ChatGPT?

“不敢下手&#xff0c;现在中国还没跑出来一家绝对有优势的大模型&#xff0c;上层应用没法投&#xff0c;担心押错宝。”投资人Jucy&#xff08;化名&#xff09;向光锥智能表示&#xff0c;AI项目看得多、投的少是这段时间的VC常态。 ChatGPT点燃AI大爆炸2个月中&#xff0…

什么软件可以文字转语音?这些软件值得收藏

我们的第一感觉是视觉&#xff0c;第二感觉是听觉&#xff0c;当我们不方面使用视觉来获取信息的时候&#xff0c;常常都会使用听觉来获取信息。比如在做家务的时候&#xff0c;我们就可以在旁边播放有声读物&#xff0c;这样子即可以做家务&#xff0c;又可以获取知识内容等。…

录音转文字app有哪些?可以试试这几款录音转文字助手

你知道怎么将手机上的录音文件转换成文字内容吗&#xff1f;生活中我们有时需要记录一些较长的活动内容&#xff0c;手头却没有纸笔&#xff0c;只能先利用手机的录音功能将其记录下来&#xff0c;之后再进行处理。那大家知道手机要怎么将录音文件转文字吗&#xff1f;还在一边…

哪些录音转文字免费软件好用?分享这三款好用的软件

(UC自媒体)录音转文字免费软件哪个好&#xff1f;这三款值得收藏 (CSDN)哪些录音转文字免费软件好用&#xff1f;分享这三款好用的软件 嘿&#xff0c;小伙伴们&#xff0c;如果你是一名正在学习外语的学生&#xff0c;那么一定会遇到听不懂英语音频里面陌生词汇的难题。常反…

录音转文字电脑软件有哪些?录音如何转文字?

现在越来越多的小伙伴步入职场工作&#xff0c;会有自己新的工作方式和规划。有的人为了能让自己尽快适应快节奏的工作状态&#xff0c;会苦思冥想的寻求应对方法。例如有的人会从会议纪要开始着手&#xff0c;即把会议上的音频内容转换为文字、文档输出。那么你们知道录音转文…

文字转语音软件哪个好?这些软件值得收藏

文字转语音免费版软件哪个好&#xff1f;相信有不少小伙伴都有考虑过这个问题&#xff0c;每当自己需要将文字转为语音的时候&#xff0c;就会很头疼&#xff0c;应该用哪款软件&#xff1f;现在市面上有很多种软件可以将文字转成语音&#xff0c;但它们不是有限制次数&#xf…