**16.app后端如何保证通讯安全--url签名
app和后端的通訊過(guò)程中,api請(qǐng)求有可能被別人截取或不小心泄露。那么,怎么保證api請(qǐng)求的安全呢?在這篇文章中,介紹一種常見(jiàn)的保證api請(qǐng)求安全的做法--url簽名。
1. url簽名詳解
在前一篇文章<15.app后端怎么設(shè)計(jì)用戶(hù)登錄方案>中,服務(wù)器中驗(yàn)證用戶(hù)名和密碼都正確后,生成一個(gè)隨機(jī)的不重復(fù)的token字符串(例如"daf32da456hfdh"),在redis或memcache中維護(hù)一個(gè)映視表,建立token字符串和用戶(hù)信息的對(duì)應(yīng)關(guān)系表,例如,把token字符串"daf32da456hfdh"和用戶(hù)id"5"對(duì)應(yīng)起來(lái),服務(wù)器把token字符串返回給app用作身份驗(yàn)證。
這個(gè)身份驗(yàn)證是依賴(lài)于token字符串。如果用戶(hù)泄露了自己的url, 那很大程度上token也被別人泄漏了。
怎么防止token被泄露?不讓token在網(wǎng)絡(luò)上傳輸就行。
注意,這個(gè)url簽名的方法是和前面<15.app后端怎么設(shè)計(jì)用戶(hù)登錄方案>緊密聯(lián)系在一起的,沒(méi)看過(guò)前面一篇文章請(qǐng)先看。
(1) 服務(wù)器中驗(yàn)證用戶(hù)名和密碼都正確后,把token字符串和用戶(hù)id都返回給客戶(hù)端,例如token字符串"daf32da456hfdh"和用戶(hù)id"5"。
(2)假設(shè)api請(qǐng)求為"test.com/user/info", 通過(guò)token字符串"daf32da456hfdh"生成md5簽名后: md5("test.com/user/info&token=daf32da456hfdh”)= C99DC0C22437AC275C08CE4A9708B25A
于是,api請(qǐng)求加上簽名和用戶(hù)標(biāo)識(shí)后就是 "test.com/user/info?userId=5&sign= C99DC0C22437AC275C08CE4A9708B25A"
(3)服務(wù)器接收到這個(gè)url后,用(2)的算法生成簽名和sign參數(shù)對(duì)比,如果發(fā)現(xiàn)相等的話(huà),就表示這個(gè)url是有有效,那就繼續(xù)執(zhí)行這個(gè)api調(diào)用。
用上面的這個(gè)方法,就能避免token在api調(diào)用時(shí)泄露。
上面的方法還有一個(gè)問(wèn)題,因?yàn)檫@個(gè)api請(qǐng)求"test.com/user/info?userId=5&sign= C99DC0C22437AC275C08CE4A9708B25A"上沒(méi)有過(guò)期時(shí)間,假設(shè)別人拿到這個(gè)api的請(qǐng)求,就能反復(fù)調(diào)用了。
改進(jìn)方法是在傳遞的參數(shù)中增加時(shí)間戳,當(dāng)發(fā)現(xiàn)這個(gè)時(shí)間戳離現(xiàn)在的時(shí)間已經(jīng)很久了,就判斷這個(gè)url已經(jīng)失效了。
但用時(shí)間戳怎么保證app的時(shí)間和服務(wù)器的時(shí)間同步?在app每次啟動(dòng)時(shí)和服務(wù)器同步時(shí)間,然后在app內(nèi)建一個(gè)時(shí)鐘,時(shí)間戳在這個(gè)app的內(nèi)部時(shí)鐘獲取,防止用戶(hù)修改了手機(jī)的時(shí)間導(dǎo)致時(shí)間不一致。
于是有了下面的改進(jìn)方法:
(1)假設(shè)api請(qǐng)求為"test.com/user/info", 用token字符串"daf32da456hfdh"和時(shí)間戳生成md5簽名后: md5("test.com/user/info?userId=5&token=daf32da456hfdh×tamp=1425860757”)= C116161A6F430343B6CECF08562F1371
于是,api請(qǐng)求加上簽名和用戶(hù)標(biāo)識(shí)后就是 "test.com/user/info?userId=5×tamp=1425860757&sign= C116161A6F430343B6CECF08562F1371"
(2)服務(wù)器接收到這個(gè)api請(qǐng)求,如果發(fā)現(xiàn)收到這個(gè)url請(qǐng)求的時(shí)間和time=1425860757相隔很久,就判斷出這個(gè)url是被別人截取來(lái)反復(fù)調(diào)用了。如果時(shí)間合法,那就用(1)的算法再判斷sign是否一致
2. url簽名的不足之處
url簽名有兩個(gè)缺點(diǎn):
1.當(dāng)用戶(hù)第一次登錄后token是明文返回,有被截取的風(fēng)險(xiǎn)
2. url簽名只能保護(hù)token值卻沒(méi)法保護(hù)其他敏感數(shù)據(jù),例如,當(dāng)用戶(hù)更新自己的個(gè)人信息時(shí),所有的信息在傳輸過(guò)程中應(yīng)該是被加密的
怎么解決這兩個(gè)問(wèn)題?使用下篇介紹的對(duì)稱(chēng)加密的算法就可以了。
?
http://blog.csdn.net/newjueqi/article/details/44154791
總結(jié)
以上是生活随笔為你收集整理的**16.app后端如何保证通讯安全--url签名的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Andriod 测试 day1andr
- 下一篇: win32窗口机制之CreateWind