拿什么守護你繁疤,我的接口?-關(guān)于接口加密測試的亂彈

接口測試好做么?用什么來做接口測試合適呢稠腊?

這是剛接觸接口測試的同學(xué)最常問的問題躁染。
個人覺得這個和你在拍照的時候是直接用美圖秀秀里面的濾鏡模式和自己去學(xué)PS后期進行處理圖片的邏輯是一樣一樣的。
在一般的情況下架忌,濾鏡處理出來的和PS出來的效果一樣么吞彤?一樣
但是在妹子需要在背景里面加個城堡,鮮花滿地的時候叹放,或者妹子需要做成女神一樣的特效的時候
濾鏡能處理么饰恕?不能。
PS能處理么井仰?能B袂丁!糕档!就是莉恼,就是,就是速那,學(xué)習(xí)成本稍微高一丟丟俐银。
高的這一丟丟是什么呢?那就是我們經(jīng)常在接口測試中遇到的各種各樣用來守護接口的安全機制問題端仰。
以下圖片自行體會一下 接口測試工具和自行編寫接口測試代碼的區(qū)別捶惜。
美圖秀秀的效果圖:


1.jpg

PS處理的效果圖:

2.jpg

為啥非要費勁的在接口上加上各種復(fù)雜的安全機制呢?
好問題荔烧。
如果你不想自己的信息輕易的被泄露出去吱七,自家網(wǎng)站被攻擊的癱瘓,公司倒閉鹤竭,CEO跑路踊餐,男女朋友分手。臀稚。吝岭。還是乖乖的跟著CC先生看一下接口相關(guān)的安全機制吧。
一般接口開發(fā)中有以下常用的幾種安全機制:

  • 用戶認證
  • 數(shù)字簽名
  • 接口加密

用戶認證
一般的接口測試工具都會提供一個User Auth/Authorization的選項吧寺,以Postman為栗子窜管,你可以看到以下的選項:

  • 基本認證(Basic Auth)
  • 摘要認證(Digest Auth)
  • OAuth 1.0a
  • OAuth 2.0(最常見,現(xiàn)在的網(wǎng)站接口多數(shù)提供此用戶認證方式)
    在對應(yīng)的工具上稚机,你可以選取對應(yīng)的用戶認證選項幕帆,這里CC先生主要介紹如果用Python如何實現(xiàn)用戶認證。

1 首先安裝Requests庫赖条,Requests庫的get()和post()方法均提供有auth參數(shù)失乾,用于設(shè)置用戶簽名常熙。
2 假定我們有一個接口為添加一個新的公告,接口需要認證:auth=("username","password")
nid 或 name兩個參數(shù)二選一
3 偽代碼:
def test_get_notice_list_nid_sucess(self):
auth_user = ('admin' , 'admin123456')
r = requests.get(self.base_url, auth = auth_user, params = {'nid' : 1})
result = r.json()
self.assertEqual(result['status'], 200)
....


數(shù)字簽名

在使用 HTTP/SOAP 協(xié)議傳輸數(shù)據(jù)的時候仗扬,簽名作為其中一個參數(shù)症概,可以起到關(guān)鍵作用:
先來一個簡單的,通過客戶的密鑰早芭,服務(wù)端的密鑰匹配彼城;
這個很有好理解,例如一個接口傳參為:
http://127.0.0.1:8000/api/?a=1&b=2
假設(shè)簽名的密鑰為:@signpassword
加上簽名之后的接口參數(shù)為:
http://127.0.0.1:8000/sign/?a=1&b=2&sign=@signpassword
但是退个,這樣的sign 參數(shù)明文傳輸是不安全的,一般會選擇一些加密算法募壕,比如MD5 算法(MD5算法是不可逆向的),比如MD5代碼如下:

            import hashlib

            md5 = hashlib.md5()
            sign_str = "@signpassword"
            sign_bytes_utf8 = sign_str.encode()
            md5.update(sign_bytes_utf8)
            sign_md5 = md5.hexdigest()
            print(sign_md5)

執(zhí)行后得到:6648e929329e53e7a91c50ae685a88b5
此時帶簽名的接口為:
http://127.0.0.1:8000/sign/?a=1&b=2&sign=6648e929329e53e7a91c50ae685a88b5
所以语盈,當(dāng)服務(wù)器接收到請求后舱馅,同樣需要對“signpassword”進行 MD5 加密,然后刀荒,比對與調(diào)用者傳來的 sign 加密串是否一致代嗤,從而來鑒別調(diào)用者是否有權(quán)限使用該接口。
接著缠借,我們來理解一個復(fù)雜一點的:把sign參數(shù)傳遞為api key(申請獲雀梢恪)+timestramp(時間戳)同樣需要 用代碼來實現(xiàn),原理和上面這個一致的泼返。(偽代碼)

def setUp(self):
  self.base_url = "http://127.0.0.1:8000/api/sec_add_notice/"
  # app_key
  self.api_key = "&APIkey"
  # 當(dāng)前時間
  now_time = time()
  self.client_time = str(now_time).split('.')[0]
  # sign
  md5 = hashlib.md5()
  sign_str = self.client_time + self.api_key
  sign_bytes_utf8 = sign_str.encode(encoding="utf-8")
  md5.update(sign_bytes_utf8)
  self.sign_md5 = md5.hexdigest()

接口加密

通常接口會使用更復(fù)雜一點的方式來進行加密的操作硝逢,常見的是AES的使用,放一張圖讓大家感受一下AES加解密的過程:

1.png

詳細的過程可以參見http://www.mamicode.com/info-detail-514466.html 或者自行百度绅喉。

Python里面有一個很好的黑魔法渠鸽,叫PyCrypto庫,支持常見的 DES柴罐、AES 加密以及 MD5徽缚、SHA 各種 HASH 運算。(官方網(wǎng)站下載最新版本:https://www.dlitz.net/software/pycrypto/
另外革屠,也可以在 PyPi 倉庫中下載安裝:https://pypi.python.org/pypi/pycrypto
對于AES的加密來說猎拨,看一下用了PyCrypto庫的結(jié)果
加密:

from Crypto.Cipher import AES
# 加密
obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
message = "The answer is no"
ciphertext = obj.encrypt(message)
print(ciphertext)

程序運行后的結(jié)果為:b'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1'
AES加密里面有兩個關(guān)鍵,一個是key(必須為16,24,32位)屠阻,一個是VI(必須為16位)
解密:解謎者必須要同時知道key和VI才可以解密

obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
s = obj2.decrypt(ciphertext)
print(s)

===
So,接口加密測試的關(guān)鍵就在于開發(fā)小哥哥們用了什么加密算法來加密接口。你用相同的加密算法來加密你要發(fā)送的值 即可额各。

CC先生說国觉,現(xiàn)在有很多的公司也把加密的算法直接封裝成一個類或者一個接口,也就是測試的時候虾啦,你直接調(diào)用加密的類或者加密的接口即可完成你的加密工作麻诀。剩下的接口測試和以往沒加密的接口測試一樣沒兩樣了痕寓。
附送一個Pypi庫里一堆加密算法庫的鏈接,自扔铡:
https://pypi.python.org/pypi?%3Aaction=search&term=crypt&submit=search

crypt.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呻率,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呻引,更是在濱河造成了極大的恐慌礼仗,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逻悠,死亡現(xiàn)場離奇詭異元践,居然都是意外死亡,警方通過查閱死者的電腦和手機童谒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門单旁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饥伊,你說我怎么就攤上這事象浑。” “怎么了琅豆?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵愉豺,是天一觀的道長。 經(jīng)常有香客問我趋距,道長粒氧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任节腐,我火速辦了婚禮外盯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翼雀。我一直安慰自己饱苟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布狼渊。 她就那樣靜靜地躺著箱熬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狈邑。 梳的紋絲不亂的頭發(fā)上城须,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音米苹,去河邊找鬼糕伐。 笑死,一個胖子當(dāng)著我的面吹牛蘸嘶,可吹牛的內(nèi)容都是我干的良瞧。 我是一名探鬼主播陪汽,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼褥蚯!你這毒婦竟也來了挚冤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤赞庶,失蹤者是張志新(化名)和其女友劉穎训挡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尘执,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡舍哄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了誊锭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片表悬。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丧靡,靈堂內(nèi)的尸體忽然破棺而出蟆沫,到底是詐尸還是另有隱情,我是刑警寧澤温治,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布饭庞,位于F島的核電站,受9級特大地震影響熬荆,放射性物質(zhì)發(fā)生泄漏舟山。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一卤恳、第九天 我趴在偏房一處隱蔽的房頂上張望累盗。 院中可真熱鬧,春花似錦突琳、人聲如沸若债。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蠢琳。三九已至,卻和暖如春镜豹,著一層夾襖步出監(jiān)牢的瞬間傲须,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工趟脂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泰讽,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像菇绵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子镇眷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中咬最,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲欠动、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 2,421評論 0 6
  • 前言 在這個互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)高速發(fā)展的時代永乌,數(shù)據(jù)安全成了企業(yè)的頭等大事。數(shù)據(jù)安全的范疇很大具伍,包含:技術(shù)安全翅雏、服務(wù)...
    淡淡藍調(diào)g閱讀 9,784評論 8 21
  • 關(guān)于封面與文社的不多說望几,由于專題剛剛創(chuàng)立,加入人數(shù)不多所以文章封面可以自己獨立制作萤厅。 關(guān)于文社:(此地還在施工中……)
    我的閔先生閱讀 396評論 0 2
  • 《國王的演講》是獲得第八十三屆奧斯卡獎的一部很有名的影片橄抹。主要說的是英國國王喬治六世,怎樣從一個患有嚴重口吃的人惕味,...
    木林心慢閱讀 683評論 0 4
  • 職場是個很微妙的環(huán)境楼誓,總能讓你發(fā)現(xiàn)更多的探索,于我就像一所學(xué)校名挥,而這所學(xué)校里的知識確怎么也學(xué)不完疟羹。這跟我的工作有...
    刻度人生閱讀 387評論 0 1