欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

ASP.NETMVCORWebAPI的接口安全怎么實現(xiàn)

這篇文章主要講解了“ASP.NET MVC OR WebAPI的接口安全怎么實現(xiàn)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“ASP.NET MVC OR WebAPI的接口安全怎么實現(xiàn)”吧!

目前成都創(chuàng)新互聯(lián)公司已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計、慶安網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

當(dāng)我們開發(fā)一款A(yù)pp的時候,App需要跟后臺服務(wù)進(jìn)行通信獲取或者提交數(shù)據(jù)。

如果我們沒有完善的安全機(jī)制則很容易被別用心的人偽造請求而篡改數(shù)據(jù)。

所以我們需要使用某種安全機(jī)制來保證請求的合法。現(xiàn)在最常用的辦法是給每個http請求添加一個簽名,服務(wù)端來驗證簽名的合法性,如果簽名合法則執(zhí)行響應(yīng)的操作,如果簽名非法則直接拒絕請求。

簽名算法

簽名算法一般都使用Hash散列算法,常用的有MD5,SHA系列算法。這些算法可以根據(jù)不同的輸入,計算出不同的結(jié)果,而且碰撞的概率很低。

簽名算法跟加密算法不是一回事。很多同學(xué)都會說使用MD5加密一下,其實這是錯誤的。簽名算法不能恢復(fù)原來的數(shù)據(jù),因為它本身并不包含原來數(shù)據(jù)的信息。

而加密方法不同,加密方法是可以根據(jù)加密結(jié)果重新推算出原來的數(shù)據(jù)的。

HMAC SHA作為一種更加安全的簽名算法,使用一個Key來影響簽名的結(jié)果。這樣同樣的輸入配合不同的Key可以得出不同的簽名,更加安全。

public static string HmacSHA256(string secretKey,string plain)

{

var keyBytes = Encoding.UTF8.GetBytes(secretKey);

var plainBytes = Encoding.UTF8.GetBytes(plain);

using (var hmacsha256 = new HMACSHA256(keyBytes))

{

var sb = new StringBuilder();

var hashValue = hmacsha256.ComputeHash(plainBytes);

foreach (byte x in hashValue)

{

sb.Append(String.Format("{0:x2}", x));

}

return sb.ToString();

}

}

簽名的參數(shù)

有了簽名算法,那么我們簽名的內(nèi)容哪里來呢?

一般我們使用http請求的queryString然后加上時間戳還有隨機(jī)數(shù)來作為簽名的參數(shù)。

public static string MakeSignPlain(SortedDictionary queryString,string time,string random )

{

var sb = new StringBuilder();

foreach (var keyValue in queryString)

{

sb.AppendFormat("{0}={1}&", keyValue.Key, keyValue.Value);

}

if (sb.Length>1)

{

sb.Remove(sb.Length - 1, 1);

}

sb.Append(time);

sb.Append(random);

return sb.ToString().ToUpper();

}

驗證簽名

驗證簽名就是簡單的比較服務(wù)端生產(chǎn)的簽名跟客戶端生產(chǎn)的簽名是否一直。

要注意的一點是最好驗證下時間戳,跟服務(wù)端時間比較前后不能相差5分鐘。這也是一個簡單的防Replay Attack的手段。

public static bool Valid(string requestSign,string signPlain,string time, string secretKey)

{

if (string.IsNullOrEmpty(time)||string.IsNullOrEmpty(requestSign)||string.IsNullOrEmpty(signPlain))

{

return false;

}

//is in range

var now = DateTime.Now;

long requestTime =0;

if (long.TryParse(time,out requestTime))

{

var max = now.AddMinutes(5).ToString("yyyyMMddHHmmss");

var min = now.AddMinutes(-5).ToString("yyyyMMddHHmmss");

if (!(long.Parse(max) >= requestTime && long.Parse(min) <= requestTime))

{

return false;

}

}

else

{

return false;

}

//hashmac

var sign = Encryption.HmacSHA256(secretKey, signPlain);

return requestSign.Equals(sign, StringComparison.CurrentCultureIgnoreCase);

}

ApiController基類

有了上面這些鋪墊我們就可以在基類完成簽名的驗證了。客戶端需要把上面提到的時間戳,隨機(jī)數(shù),簽名和客戶端的ID放入http請求的headers里面。

我們在基類的OnActionExecuting里取出這些數(shù)據(jù)組合成簽名的參數(shù),然后根據(jù)客戶端ID獲取簽名的Key,然后使用同樣的簽名算法計算簽名。并且比較客戶端的簽名跟服務(wù)端的簽名是否一致。

預(yù)防Replay Attack

預(yù)防重放***主要有兩點:

校驗時間戳的范圍

時間戳跟服務(wù)器時間相差在一個合理的范圍內(nèi)視為合法。

緩存簽名

每次請求都去判斷下簽名是否出現(xiàn)過。如果出現(xiàn)過則視為非法請求。

因為有時間戳跟隨機(jī)數(shù)的存在,所以理論上每次請求的簽名是不可能重復(fù)的。

客戶端調(diào)用

這里演示一下C#簽名并且調(diào)用http接口的代碼

[TestMethod()]

public void GetUserTest()

{

string url = "http://localhost:8090/api/test/GetUser";

string userId = "A39891D4-6CEF-4538-A562-3A422CA9C17A";

string appId = "100001";

string secretKey = "M/vkPOWXgBa7GnRd73t7j+jsKfbZtb+f";

string rumdon = Guid.NewGuid().ToString();

string time = DateTime.Now.ToString("yyyyMMddHHmmss");

//make signture plain text

var sortDict = new SortedDictionary()

{

{"userId",userId }

};

var signPlain = new StringBuilder();

foreach (var keyValue in sortDict)

{

signPlain.AppendFormat("{0}={1}&", keyValue.Key, keyValue.Value);

}

if (signPlain.Length > 1)

{

//remove last &

signPlain.Remove(signPlain.Length - 1, 1);

}

signPlain.Append(time);

signPlain.Append(random);

Console.WriteLine("sign plain:{0}", signPlain.ToString().ToUpper());

//make sign

var sign = Encryption.HmacSHA256(secretKey, signPlain.ToString().ToUpper());

Console.WriteLine("sign:{0}", sign);

string requestUrl = string.Format("{0}?{1}={2}", url, "userId", userId);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);

request.Method = "GET";

//add headers

request.Headers.Add("time", time);

request.Headers.Add("appId", appId);

request.Headers.Add("random", random);

request.Headers.Add("sign", sign);

//

//start request

try

{

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())

{

var responseStream = response.GetResponseStream();

if (responseStream != null)

{

using (StreamReader reader = new StreamReader(responseStream))

{

var content = reader.ReadToEnd();

Console.WriteLine(content);

}

}

}

}

catch (WebException ex)

{

using (HttpWebResponse response = (HttpWebResponse)ex.Response)

{

var responseStream = response.GetResponseStream();

if (responseStream != null)

{

using (StreamReader reader = new StreamReader(responseStream))

{

var content = reader.ReadToEnd();

Console.WriteLine(content);

}

}

}

}

}

感謝各位的閱讀,以上就是“ASP.NET MVC OR WebAPI的接口安全怎么實現(xiàn)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對ASP.NET MVC OR WebAPI的接口安全怎么實現(xiàn)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

當(dāng)前題目:ASP.NETMVCORWebAPI的接口安全怎么實現(xiàn)
網(wǎng)頁地址:http://aaarwkj.com/article2/pegeic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站設(shè)計、用戶體驗、面包屑導(dǎo)航、營銷型網(wǎng)站建設(shè)、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
国产亚洲精品久久久9| 国产一区二区av免费| 九九热在线视频观看最新| av在线男人社区日韩| 在线免费观看91亚洲| 国产中文字幕精品在线| 亚洲欧洲国产视频一区二区| 国产亚洲精品久久综合阿香| 中文字幕国产精品一区二| 精品视频一区二区三区中文字幕 | 校园春色亚洲欧美日韩| 国产成人综合亚洲国产| 亚洲男人av天堂东京热 | 久久国产精品午夜视频| 免费观看日本成人午夜大片| 亚洲成人av在线直播| 18禁止看的视频免费| 欧美高清在线观看一区二区| 蜜桃视频在线视频免费观看| 亚洲男人天堂中文字幕| 中文字幕一区二区三天| 亚洲最大色网在线观看| 麻豆看片高清在线播放| 中文字幕人妻熟女在线| 精品久久久久久蜜臀av| 国内不卡一区二区三区| 在线青青草视频免费观看| 亚洲精品av一区二区久久| 久草热不卡的av在线| 成人av高清在线观看| 亚洲综合日韩精品在线| 最新日本欧美一区二区| 日本和亚洲的香蕉视频| 91人妻精品一区二区| 日本精品视频免费网| 91精品日日躁夜夜躁欧美| 国内揄拍国内精品少妇国| 不卡的视频在线观看| 超碰av之男人的天堂| 成人深夜福利视频观看| 成年视频免费观看视频|