日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

请给你的短信验证码接口加上SSL双向验证

發(fā)布時(shí)間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 请给你的短信验证码接口加上SSL双向验证 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

序言

去年年底閑來(lái)幾天,有位同事專門在網(wǎng)上找一些注冊(cè)型的app和網(wǎng)站,研究其短信接口是否安全,半天下來(lái)找到30來(lái)家,一些短信接口由于分析難度原因,沒(méi)有繼續(xù)深入,但差不多挖掘到20來(lái)個(gè),可以肆意被調(diào)用,雖然不能控制短信內(nèi)容,但可以被惡意消耗,或者用于狂發(fā)信息給那些不喜歡的人。

漏洞分析

短信接收方無(wú)法約束

由于是注冊(cè)型接口,接收方往往都是平臺(tái)內(nèi)不存在的手機(jī)號(hào),所以無(wú)法約束。

接口請(qǐng)求方無(wú)法約束

由于是http(s)接口,任何人都可以請(qǐng)求,只要簡(jiǎn)單分析你的接口。

調(diào)用頻次無(wú)法約束

一般的,接口開(kāi)發(fā)者可能會(huì)想到通過(guò)抓取接口請(qǐng)求者的ip,進(jìn)行頻次約束,但實(shí)現(xiàn)是,他們拿到只是請(qǐng)求者的公網(wǎng)ip,有可能一個(gè)體量很大的局域網(wǎng)用戶,接口開(kāi)發(fā)者抓取到的都是他們的同一個(gè)公網(wǎng)ip,所以通過(guò)ip約束在很多場(chǎng)景下是不能使用的。

漏洞原因

原因其實(shí)很簡(jiǎn)單,接口開(kāi)發(fā)者無(wú)法知道哪些請(qǐng)求是合理的,有些請(qǐng)求是不合理或惡意的,因?yàn)樗姓?qǐng)求者都沒(méi)有身份信息。

漏洞填補(bǔ)

  • 如果你的注冊(cè)功能是web頁(yè)面,最好加上驗(yàn)證碼功能,但使用便利性會(huì)打折。

  • 如果你的注冊(cè)功能是手機(jī)端,那就上SSL雙向驗(yàn)證,中間人既無(wú)法分析你的接口,也無(wú)法發(fā)起請(qǐng)求連接到你接口服務(wù),更不用說(shuō)請(qǐng)求你的接口。

SSL/TLS雙向驗(yàn)證

單向驗(yàn)證

我們平時(shí)瀏覽器請(qǐng)求的https網(wǎng)頁(yè),其實(shí)是SSL/TLS單向的客戶端驗(yàn)證服務(wù)端的證書(shū),也就是服務(wù)端不要求客戶端有公認(rèn)的證書(shū),但客戶端是要求服務(wù)端必須提供受信任的數(shù)字證書(shū)頒發(fā)機(jī)構(gòu)證書(shū)。中間傳輸?shù)臄?shù)據(jù)是加密安全的,但服務(wù)端是無(wú)法得到能代表客戶端的身份信息的,而且,客戶端的請(qǐng)求加密數(shù)據(jù)是可以間接被攔截、解析、重構(gòu)數(shù)據(jù)包再發(fā)送到服務(wù)端的(你可以了解Fiddler是怎么做到分析https接口的)。

雙向驗(yàn)證

雙向驗(yàn)證是指在單向驗(yàn)證的基礎(chǔ)上,服務(wù)端也需要驗(yàn)證客戶端的證書(shū),只有客戶端持有服務(wù)端認(rèn)定的指定證書(shū),服務(wù)端才允許客戶端通過(guò)SSL握手,否則直接關(guān)閉tcp連接。對(duì)于需要雙向驗(yàn)證的https接口,Fiddler也是無(wú)能為力,因?yàn)樗约阂策B接到不到服務(wù)端。

客戶端證書(shū)

客戶端證書(shū)我們不需要花錢去購(gòu)買,使用openssl tools來(lái)自頒發(fā)就可以,服務(wù)端一般驗(yàn)證其thumdata是否滿足就可以了。

安全的asp.net core短信接口

回到實(shí)際干活擼代碼階段,我們可以把短信接口獨(dú)立出來(lái),做單獨(dú)一個(gè)服務(wù),其提供的只有短信功能的接口,接口必須雙向證書(shū)驗(yàn)證,使用 kestrel ,我們很容易加入驗(yàn)證客戶端的代碼邏輯。

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) =>
{
// 你的驗(yàn)證邏輯
},
};
listenOptions.UseHttps(httpsConnectionAdapterOptions);
});
})
.UseStartup<Startup>();
}
}

Openssl生成cer、key和pfx

openssl genrsa -out openssl.key 1024
openssl req -new -x509 -key openssl.key -out openssl.cer -days 3650 -subj /CN=localhost
openssl pkcs12 -export -out openssl.pfx -inkey openssl.key -in openssl.cer

如果你在Postman請(qǐng)求,設(shè)置cer和key文件到postman即可,如果在.net環(huán)境請(qǐng)求這些接口,你需要使用pfx,你可以簡(jiǎn)單理解pfx就是前兩者使用一個(gè)可選的密碼進(jìn)行打包的得到單一文件。關(guān)于證書(shū)本身的內(nèi)容非常龐大,本文不作任何解讀。

.net的客戶端怎么設(shè)置證書(shū)

這里先賣個(gè)關(guān)子,使用WebApiClient庫(kù),可以輕松完成你想要的。

原文地址:https://www.cnblogs.com/kewei/p/10765421.html

.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總?http://www.csharpkit.com?


總結(jié)

以上是生活随笔為你收集整理的请给你的短信验证码接口加上SSL双向验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。