序言

去年年底闲来几天,有位同事专门在网上找一些注册型的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双向验证相关推荐

  1. php短信接口加密_PHP短信接口、PHP短信验证码接口源码

    PHP短信接口.PHP短信验证码接口源码 时间:2016-06-13 11:53 来源:原创 作者:admin PHP短信接口文档源码,PHP发短信接口,PHP在线发短信,PHP微信发短信接口 /* ...

  2. 如何防止短信验证码接口、登录注册入口被恶意调用攻击?

    目录 前言 1.短信验证码是什么? 2.为什么要对短信验证码进行防护? 3.有哪些常见的防护手段? 4.这些防护手段有没有用呢,到底该如何选择? 5.结语 前言 最近遇到一个关于防止短信验证码被刷的问 ...

  3. 全国通用标准化HTTP短信验证码接口,接入从未如此简单

    熟练掌握接口对接是一个程序猿的基本功,短信验证码接口作为企业商用最常见也是用的最多的一个接口,能够快速的接入当然是可以省下不少的时间啦!下面给大家介绍一个简单快速的接入方法啦! 验证码的前端代码很简单 ...

  4. 中国网建短信验证码接口方法

    中国网建短信验证码接口方法: 提示:请先注册中国网建短信平台 package cn.xxx.basic.utils; import org.apache.commons.httpclient.Head ...

  5. 短信验证码接口的应用场景和优势

    短信验证码接口是常用于网络平台的一种短信功能接口,它在用户注册登录.密码找回.账户变更.确认支付.活动认证等场景都会应用到,短信接口作为网络平台与用户之间重要交互手段,凭借其速度快.到达率高.安全性好 ...

  6. 如何防止恶意攻击短信验证码接口

    如何防止恶意攻击短信验证码接口 1 自研技术 2 自研验证码被破解怎么办? 3 所有图形验证码都被破解怎么办? 1 自研技术 1.手机号码限制:限制单个手机号码每天的最大发送次数.超过次数不能发送短信 ...

  7. java防止注册刷短信攻击_java面试(1)如何防止恶意攻击短信验证码接口

    防止恶意攻击短信验证码接口方法 1.手机号码限制:限制单个手机号码每天的最大发送次数.超过次数不能发送短信,可以考虑将手机号码加入黑名单,禁止1天. 2.短信发送时间间隔限制:限制同一个手机号码重复发 ...

  8. 手机短信验证码接口在各领域的应用

    很多网站.APP应用.内部管理软件在使用过程中,都需要会员进行手机号码验证.登录验证.操作验证,在各种验证形式中,手机短信验证的方式最为简单和方便.根据不同的应用领域,手机短信验证可以广泛应用在如下方 ...

  9. 【转载】C语言,利用网络短信验证码接口实现手机短信发送

    利用网络短信验证码接口实现手机短信发送 (历史代码,贴出学习) resource.h //resource.h//{{NO_DEPENDENCIES}} // Microsoft Visual C++ ...

最新文章

  1. mysql参数thread_cache和table_cache详解
  2. Windows核心编程 第四章 进程(下)
  3. android 恢复出厂设置 时间,Android 恢复出厂设置后,时间不能恢复为:2013年1月1日...
  4. android查看存储占用,Android获取App内存使用情况的方法
  5. 苹果第二代自研M系列芯片MacBook Pro有望在未来几周上市
  6. Java数组与容器类分析资料--数组、List和Set、Map-asp.net关注
  7. python 查找IP地址归属地
  8. jquery validate的验证规则和验证提示
  9. Ubuntu系统使用罗技鼠标
  10. 一个完整的、全面k8s化的集群稳定架构(值得借鉴)
  11. 三星S7edge刷极光ROM的总结_我是亲民_新浪博客
  12. CwRsync安装配置
  13. python 应用thrift---- thrift的监控fb303 - import coding_dog ---- by 坚毅的刀刀 - 博客大巴...
  14. 下厨房内部孵化项目——懒饭产品体验分析报告
  15. 制作人 Joe Carrell 教你充分释放TB12音色野兽
  16. 拉卡拉支付开启生态化移动支付新趋势
  17. HTML+CSS梦幻西游动画
  18. Library\PackageCache\com.unity Error (are you missing a using directive or an assembly reference?)
  19. 计算机科学在职研究生排名,计算机在职研究生院校
  20. 原生JS灵魂之问(中),看看你是否熟悉JavaScript?

热门文章

  1. 中输入learn_Scikit-learn新版本发布,一行代码秒升级
  2. EventBus的实现
  3. Javascript基础之-Promise
  4. 点击回退按钮刷新页面
  5. 实践 Neutron 前的两个准备工作 - 每天5分钟玩转 OpenStack(78)
  6. 在此之前的软件系统做开发—需求的研究框架
  7. 8606 二叉树遍历的建设和运营
  8. 如何扩展开发团队(转)
  9. LYNC2013部署系列PART4:群聊部署
  10. HttpHandler浅析