请给你的短信验证码接口加上SSL双向验证
序言
去年年底闲来几天,有位同事专门在网上找一些注册型的app和网站,研究其短信接口是否安全,半天下来找到30来家,一些短信接口由于分析难度原因,没有继续深入,但差不多挖掘到20来个,可以肆意被调用,虽然不能控制短信内容,但可以被恶意消耗,或者用于狂发信息给那些不喜欢的人。
漏洞分析
短信接收方无法约束
由于是注册型接口,接收方往往都是平台内不存在的手机号,所以无法约束。
接口请求方无法约束
由于是http(s)接口,任何人都可以请求,只要简单分析你的接口。
调用频次无法约束
一般的,接口开发者可能会想到通过抓取接口请求者的ip,进行频次约束,但实现是,他们拿到只是请求者的公网ip,有可能一个体量很大的局域网用户,接口开发者抓取到的都是他们的同一个公网ip,所以通过ip约束在很多场景下是不能使用的。
漏洞原因
原因其实很简单,接口开发者无法知道哪些请求是合理的,有些请求是不合理或恶意的,因为所有请求者都没有身份信息。
漏洞填补
如果你的注册功能是web页面,最好加上验证码功能,但使用便利性会打折。
如果你的注册功能是手机端,那就上SSL双向验证,中间人既无法分析你的接口,也无法发起请求连接到你接口服务,更不用说请求你的接口。
SSL/TLS双向验证
单向验证
我们平时浏览器请求的https网页,其实是SSL/TLS单向的客户端验证服务端的证书,也就是服务端不要求客户端有公认的证书,但客户端是要求服务端必须提供受信任的数字证书颁发机构证书。中间传输的数据是加密安全的,但服务端是无法得到能代表客户端的身份信息的,而且,客户端的请求加密数据是可以间接被拦截、解析、重构数据包再发送到服务端的(你可以了解Fiddler是怎么做到分析https接口的)。
双向验证
双向验证是指在单向验证的基础上,服务端也需要验证客户端的证书,只有客户端持有服务端认定的指定证书,服务端才允许客户端通过SSL握手,否则直接关闭tcp连接。对于需要双向验证的https接口,Fiddler也是无能为力,因为它自己也连接到不到服务端。
客户端证书
客户端证书我们不需要花钱去购买,使用openssl tools来自颁发就可以,服务端一般验证其thumdata是否满足就可以了。
安全的asp.net core
短信接口
回到实际干活撸代码阶段,我们可以把短信接口独立出来,做单独一个服务,其提供的只有短信功能的接口,接口必须双向证书验证,使用 kestrel ,我们很容易加入验证客户端的代码逻辑。
public static IWebHostBuilder CreateWebHostBuilder(string[] args){return WebHost.CreateDefaultBuilder(args).UseKestrel((context, options) => {var port = context.Configuration.GetValue<int>("SSL:Port");var serverCertFile = context.Configuration.GetValue<string>("SSL:ServerCertFile");var serverCertPassword = context.Configuration.GetValue<string>("SSL:ServerCertPassword");
options.Listen(IPAddress.Any, port, listenOptions => {var httpsConnectionAdapterOptions = new HttpsConnectionAdapterOptions() { ServerCertificate = new X509Certificate2(serverCertFile, serverCertPassword), ClientCertificateMode = ClientCertificateMode.RequireCertificate, ClientCertificateValidation = (cer, chain, error) => {// 你的验证逻辑 }, }; listenOptions.UseHttps(httpsConnectionAdapterOptions); }); }).UseStartup<Startup>(); }}
Openssl生成cer、key和pfx
openssl genrsa -out openssl.key 1024openssl req -new -x509 -key openssl.key -out openssl.cer -days 3650 -subj /CN=localhostopenssl pkcs12 -export -out openssl.pfx -inkey openssl.key -in openssl.cer
如果你在Postman请求,设置cer和key文件到postman即可,如果在.net环境请求这些接口,你需要使用pfx,你可以简单理解pfx就是前两者使用一个可选的密码进行打包的得到单一文件。关于证书本身的内容非常庞大,本文不作任何解读。
.net的客户端怎么设置证书
这里先卖个关子,使用WebApiClient库,可以轻松完成你想要的。
原文地址:https://www.cnblogs.com/kewei/p/10765421.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
请给你的短信验证码接口加上SSL双向验证相关推荐
- php短信接口加密_PHP短信接口、PHP短信验证码接口源码
PHP短信接口.PHP短信验证码接口源码 时间:2016-06-13 11:53 来源:原创 作者:admin PHP短信接口文档源码,PHP发短信接口,PHP在线发短信,PHP微信发短信接口 /* ...
- 如何防止短信验证码接口、登录注册入口被恶意调用攻击?
目录 前言 1.短信验证码是什么? 2.为什么要对短信验证码进行防护? 3.有哪些常见的防护手段? 4.这些防护手段有没有用呢,到底该如何选择? 5.结语 前言 最近遇到一个关于防止短信验证码被刷的问 ...
- 全国通用标准化HTTP短信验证码接口,接入从未如此简单
熟练掌握接口对接是一个程序猿的基本功,短信验证码接口作为企业商用最常见也是用的最多的一个接口,能够快速的接入当然是可以省下不少的时间啦!下面给大家介绍一个简单快速的接入方法啦! 验证码的前端代码很简单 ...
- 中国网建短信验证码接口方法
中国网建短信验证码接口方法: 提示:请先注册中国网建短信平台 package cn.xxx.basic.utils; import org.apache.commons.httpclient.Head ...
- 短信验证码接口的应用场景和优势
短信验证码接口是常用于网络平台的一种短信功能接口,它在用户注册登录.密码找回.账户变更.确认支付.活动认证等场景都会应用到,短信接口作为网络平台与用户之间重要交互手段,凭借其速度快.到达率高.安全性好 ...
- 如何防止恶意攻击短信验证码接口
如何防止恶意攻击短信验证码接口 1 自研技术 2 自研验证码被破解怎么办? 3 所有图形验证码都被破解怎么办? 1 自研技术 1.手机号码限制:限制单个手机号码每天的最大发送次数.超过次数不能发送短信 ...
- java防止注册刷短信攻击_java面试(1)如何防止恶意攻击短信验证码接口
防止恶意攻击短信验证码接口方法 1.手机号码限制:限制单个手机号码每天的最大发送次数.超过次数不能发送短信,可以考虑将手机号码加入黑名单,禁止1天. 2.短信发送时间间隔限制:限制同一个手机号码重复发 ...
- 手机短信验证码接口在各领域的应用
很多网站.APP应用.内部管理软件在使用过程中,都需要会员进行手机号码验证.登录验证.操作验证,在各种验证形式中,手机短信验证的方式最为简单和方便.根据不同的应用领域,手机短信验证可以广泛应用在如下方 ...
- 【转载】C语言,利用网络短信验证码接口实现手机短信发送
利用网络短信验证码接口实现手机短信发送 (历史代码,贴出学习) resource.h //resource.h//{{NO_DEPENDENCIES}} // Microsoft Visual C++ ...
最新文章
- mysql参数thread_cache和table_cache详解
- Windows核心编程 第四章 进程(下)
- android 恢复出厂设置 时间,Android 恢复出厂设置后,时间不能恢复为:2013年1月1日...
- android查看存储占用,Android获取App内存使用情况的方法
- 苹果第二代自研M系列芯片MacBook Pro有望在未来几周上市
- Java数组与容器类分析资料--数组、List和Set、Map-asp.net关注
- python 查找IP地址归属地
- jquery validate的验证规则和验证提示
- Ubuntu系统使用罗技鼠标
- 一个完整的、全面k8s化的集群稳定架构(值得借鉴)
- 三星S7edge刷极光ROM的总结_我是亲民_新浪博客
- CwRsync安装配置
- python 应用thrift---- thrift的监控fb303 - import coding_dog ---- by 坚毅的刀刀 - 博客大巴...
- 下厨房内部孵化项目——懒饭产品体验分析报告
- 制作人 Joe Carrell 教你充分释放TB12音色野兽
- 拉卡拉支付开启生态化移动支付新趋势
- HTML+CSS梦幻西游动画
- Library\PackageCache\com.unity Error (are you missing a using directive or an assembly reference?)
- 计算机科学在职研究生排名,计算机在职研究生院校
- 原生JS灵魂之问(中),看看你是否熟悉JavaScript?