网站服务器与虚拟主机,flask做网站工具,重庆市建设工程信息网上查询,163注册企业邮箱序言去年年底闲来几天#xff0c;有位同事专门在网上找一些注册型的app和网站#xff0c;研究其短信接口是否安全#xff0c;半天下来找到30来家#xff0c;一些短信接口由于分析难度原因#xff0c;没有继续深入#xff0c;但差不多挖掘到20来个#xff0c;可以肆意被调… 序言去年年底闲来几天有位同事专门在网上找一些注册型的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.GetValueint(SSL:Port);var serverCertFile context.Configuration.GetValuestring(SSL:ServerCertFile);var serverCertPassword context.Configuration.GetValuestring(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); }); }).UseStartupStartup(); }}Openssl生成cer、key和pfxopenssl genrsa -out openssl.key 1024openssl req -new -x509 -key openssl.key -out openssl.cer -days 3650 -subj /CNlocalhostopenssl 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