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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

序言

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

漏洞分析

短信接收方無法約束

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

接口請求方無法約束

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

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

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

漏洞原因

原因其實(shí)很簡單,接口開發(fā)者無法知道哪些請求是合理的,有些請求是不合理或惡意的,因?yàn)樗姓埱笳叨紱]有身份信息。

漏洞填補(bǔ)

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

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

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

單向驗(yàn)證

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

雙向驗(yàn)證

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

客戶端證書

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

安全的asp.net core短信接口

回到實(shí)際干活擼代碼階段,我們可以把短信接口獨(dú)立出來,做單獨(dú)一個服務(wù),其提供的只有短信功能的接口,接口必須雙向證書驗(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請求,設(shè)置cer和key文件到postman即可,如果在.net環(huán)境請求這些接口,你需要使用pfx,你可以簡單理解pfx就是前兩者使用一個可選的密碼進(jìn)行打包的得到單一文件。關(guān)于證書本身的內(nèi)容非常龐大,本文不作任何解讀。

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

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

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

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


總結(jié)

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

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