去年3Q大戰(zhàn)之后,開放幾乎成為了最熱的詞匯,隨后的國內(nèi)互聯(lián)網(wǎng)看似進入了開放平臺的“蜜年”,各種基于開放平臺的應(yīng)用和社會化登錄也隨之出現(xiàn)。
將自身的產(chǎn)品和服務(wù)與大網(wǎng)站平臺對接,不僅能省去注冊等繁瑣工作,不用為儲存和傳輸大量的用戶賬號信息而煩惱,還可以迅速的帶來流量、用戶資源,并得到更好的推廣。而對于平臺來說通過 API 支持協(xié)議可以得到很多的應(yīng)用接入,可以為用戶提供更多更好的服務(wù)。這對開發(fā)者和平臺提供商來說是雙贏的局面。因此,QQ 登錄、各種微博登錄和 SNS 登陸也似乎成為了第三方網(wǎng)站或應(yīng)用的必備按鈕。(在昨天騰訊宣布其QQ登錄已經(jīng)成為國內(nèi)最大第三方帳號登錄體系。)
本來利用已有的賬號登陸這些第三方網(wǎng)站和應(yīng)用是一件好的事情,因為從體驗上來說可以方便用戶,但是國內(nèi)這些“一鍵登陸”真的是用戶想的那樣“一鍵登陸”嗎?我們看到一個網(wǎng)站就用我們的賬號登陸難道沒有隱患嗎? 這些”登陸“的背后的關(guān)鍵是什么?
如果你有夠細(xì)心的話會發(fā)現(xiàn)所有登陸基本都是彈出一個對應(yīng)對話框,其地址欄中也都會包含有“OAuth”字樣。這說明,其當(dāng)前采用的是 OAuth 協(xié)議。在目前,無論是國外還是國內(nèi),絕大部分都是采用 OAuth 協(xié)議來完成在第三方網(wǎng)站或應(yīng)用的登陸的。
OAuth 是什么?它有什么優(yōu)點呢?為什么都采用 OAuth?
OAuth(開放授權(quán))是一個開放標(biāo)準(zhǔn) ,允許用戶讓第三方應(yīng)用訪問該用戶在某一網(wǎng)站上存儲的私密的資源(如照片,視頻,聯(lián)系人列表),而無需將用戶名和密碼提供給第三方應(yīng)用。via 維基百科
OAuth 的優(yōu)點
OAuth 不會使第三方網(wǎng)站或應(yīng)用接觸到用戶的帳號信息(如用戶名與密碼),授權(quán)后的 http 通信中也不再傳輸用戶信息而是以數(shù)字簽名和訪問令牌(Access Token)取代,即使截到數(shù)據(jù)包,也無法還原出用戶的登錄信息。這是OAuth 最大的優(yōu)點,也是它得以逐漸成為現(xiàn)在通用的授權(quán)標(biāo)準(zhǔn)的原因。
OAuth 被普及的原因
對用戶來說方便、安全;對中小第三方網(wǎng)站和應(yīng)用來說,OAuth 可以使它們能夠得到用戶基本信息外的其他信息資料和賬戶部分使用權(quán)限;對大網(wǎng)站平臺來說,OAuth 可以完美的解決用戶的賬戶安全和開發(fā)者授權(quán)的平衡問題。因此 OAuth 協(xié)議確定后就獲得了包括國外 Twitter、Facebook 和 Google 等認(rèn)可,之后在國內(nèi)也得到了有效跟進。
OAuth 授權(quán)的信息隱患
凡是只有其利就有其弊,OAuth 也不例外。為什么在安全上看似完美無缺的 OAuth 都有信息隱患呢?
1. 被濫用了的 OAuth 授權(quán)
OAuth 是一個授權(quán)(authorization)協(xié)議而不是認(rèn)證(authentication)協(xié)議,因此,對于 OAuth 來說最大的信息隱患就是其本身。
OAuth 提供的是權(quán)限分配而非認(rèn)證。在國內(nèi)大多數(shù)網(wǎng)站的一鍵登陸根本沒有去區(qū)分認(rèn)證和授權(quán) ,全部混淆為授權(quán)。本身用類似 OpenID 的簡單認(rèn)證即可完成的事情卻非要走授權(quán)。而一鍵登陸在給用戶帶來便利的同時也帶來了另一個弊端:用戶變得越來越不在意自己的賬號。因為 OAuth 協(xié)議本身的安全給了我們一種假象:別人獲取不到我的賬號密碼,所以我的賬戶很安全。我們要明白,授權(quán)本身的實質(zhì)相當(dāng)于系統(tǒng)為第三方網(wǎng)站/應(yīng)用開了一個后門,而你的授權(quán)就是允許它們可以走后門進來獲取你的隱私資料和使用權(quán)限。
打個比方就是,雖然它們不知道你家的鎖長什么樣,也沒有你家的鑰匙,但是人家就是能進得去你家,還可以看你家的電話簿,用你家的電話給你的親朋好友打電話等。很多其實扮演的只是抄水表的角色,在門外瞅一眼即可,但是偏偏國內(nèi)那些平臺們把水表安到了你家里面,這樣很多抄水表的就可以打著抄水表的借口從后門去你家向你的親朋好友宣傳它水表抄的好,想繼續(xù)去你親朋好友家抄水表。
譬如一些小游戲和星座信息之類的第三方網(wǎng)站和應(yīng)用,無一例外都會要求我們授權(quán)給它們我們的好友關(guān)系、生日、相冊、評論、甚至地理信息位置。對于我們來說,個人信息的安全不僅僅是我們的用戶名和密碼,那些“被授權(quán)”的都是信息安全的一部分,甚至是最重要的部分。前幾天通過 QQ 圈子我們也了解到了這些信息有多重要。
你授權(quán)的網(wǎng)站/應(yīng)用越多,意味著越多的網(wǎng)站和應(yīng)用能夠接觸到你的賬戶資料并擁有部分使用權(quán)限,也意味著隱患越多。雖然它們并沒有獲取到的你的賬戶密碼,雖然你之后從未登陸過或使用過它們,但是,除非你去隱藏很深的后臺設(shè)置里面取消它們的權(quán)限,否則它們是一直能夠接觸到你的賬戶資料并擁有你賬戶的部分使用權(quán)限的。
某種程度上說,OAuth 對我們個人信息安全來說是一扇隱形的窗戶,而且這個窗戶還是默認(rèn)永久開放的。
2. OAuth 使用的不規(guī)范
在很多時候,出問題的環(huán)節(jié)往往不是技術(shù),而是背后使用技術(shù)的人。
1. 平臺 OAuth 部署不規(guī)范
OAuth 部署是否規(guī)范,例如有無強制使用 https 加密,有無強制部署 OAuth 2.0。對移動應(yīng)用的授權(quán)有無注意應(yīng)用會自建瀏覽器,有無注意在信息回傳過程中的信息防護,這些都是需要考據(jù)的問題。OAuth 協(xié)議本身沒有問題,但是對協(xié)議的用途是否規(guī)范值得商榷。
事實上,各開放平臺之間的技術(shù)差異很大,因此每個平臺使用并不是相同版本的協(xié)議,有 OAuth 1.0、OAuth 2.0 或混合的技術(shù)體系(甚至還有繼續(xù)使用不安全的 Basic Auth)。此外,如果你去翻看一下國內(nèi)各個開放平臺的開發(fā)文檔就會發(fā)現(xiàn),雖然 OAuth 整體流程大致類似,但是對于授權(quán)的定義各家有各家的標(biāo)準(zhǔn),對待開發(fā)者的態(tài)度各不相同,對授權(quán)的限制也是各家有各家的標(biāo)準(zhǔn) ,對用戶的賬號保護也是各有各的說法。
例如某家開發(fā)平臺上對待涉及自身利益的時候用“嚴(yán)禁”“禁止”字眼,而涉及用戶賬號利益的時候就變成了“不應(yīng)”、“不鼓勵” 等字樣。再例如,對未審核應(yīng)用、待審核應(yīng)用和未通過審核應(yīng)用的限制,國內(nèi)只有兩家平臺對使用人數(shù)進行限制外,其他各家都只是稍微限制了一下調(diào)用頻率次數(shù)和不顯示來源而已。
綜合來看,國內(nèi)的關(guān)于OAuth協(xié)議標(biāo)準(zhǔn)的實施部署是一個開發(fā)者和平臺綜合博弈的結(jié)果。
2. 應(yīng)用開發(fā)者不自律
OAuth 的安全性相當(dāng)一部分需要依靠應(yīng)用開發(fā)者的高度自律,不該有的權(quán)限不去申請,但是事實并非如此。正常情況下,平時我們所用的 90% 的應(yīng)用只需用只讀權(quán)限即可,但是相反的是,只有 5% 的應(yīng)用只擁有只讀權(quán)限。對于開發(fā)者開說,盡量獲取到用戶賬戶的使用權(quán)限似乎是一種”追求“,而不管用不用得到。這不僅讓人想起了 Android 移動應(yīng)用上的普遍高權(quán)限。
3. 平臺審核是否仔細(xì)
第三方網(wǎng)站或應(yīng)用要接入平臺需要通過平臺的審核,審核是一層對開發(fā)者的把關(guān)。因為平臺競爭的原因,各家審核標(biāo)準(zhǔn)并不一致,實際操作更是誰也不清楚?傮w來看,強勢的平臺限制嚴(yán)格,弱勢的平臺因為要吸引開發(fā)者所以很多事情睜一只眼閉一只眼。
4. 用戶對 OAuth 的不設(shè)防
OAuth 協(xié)議的實施很類似微軟平臺下軟件的安裝,用戶經(jīng)常在一步步的點擊中默認(rèn)”被授權(quán)“,因為國內(nèi)大多數(shù)用戶暫時還沒有注意防護自己賬戶信息和權(quán)限的習(xí)慣。
我們該注意些什么?該怎么做?
1. 防止 OAuth 釣魚登陸界面
注意觀察彈出窗口是否為官方登陸域名,要謹(jǐn)防假冒釣魚。
2. 授權(quán)之前的三思
在你將自己的賬號權(quán)限授權(quán)給一個應(yīng)用之前,先查清楚應(yīng)用開發(fā)者的具體信息和他們的隱私保護條款,知道自己到底授權(quán)給了誰,到底給誰授予了哪些權(quán)限。
3. 定時清理你的第三方應(yīng)用授權(quán)
要注意清理你的第三方應(yīng)用授權(quán),將那些無關(guān)緊要的或已經(jīng)不再使用的第三方網(wǎng)站或應(yīng)用取消授權(quán),關(guān)上那扇隱形的窗戶。
4.授權(quán)后注意其來源
授權(quán)第三方網(wǎng)站或應(yīng)用后要注意查看其有沒有通過官方平臺的審核,如果來源顯示來自”未審核應(yīng)用“或類似字樣后盡量先取消其授權(quán),待審核通過后再進行授權(quán)。
未來,國內(nèi)應(yīng)該分區(qū)開認(rèn)證和授權(quán),給用戶減少不必要的隱患,期待國內(nèi)出現(xiàn)一個統(tǒng)一的OpenID(不像國外 OpenID 那樣繁瑣,或許類似 BrowserID 的東西),而不像現(xiàn)在,雖然號稱一鍵登陸,但實際上許多第三方網(wǎng)站/應(yīng)用在用戶授權(quán)登錄后,依舊有二次登錄或重新注冊等操作。
雖然目前這些隱患只是表現(xiàn)為偶爾的偷偷關(guān)注或偷偷以用戶賬號發(fā)一些廣告,并沒有爆發(fā)出嚴(yán)重的事件。但是想想那么多隱私信息和部分權(quán)限控制在那么多的第三方應(yīng)用或平臺上就有點不寒而栗的感覺。
服務(wù)的整合本來是大勢所趨,也是未來方向,但是國內(nèi)這些將認(rèn)證和授權(quán)混為一談的做法使得我們不僅沒有更使得我們可以更方便更安全更省事的去管理,去獲得服務(wù),反而使我們的賬戶更加混亂,更埋下了信息安全的隱患。對此我們一定要提高警惕。
后記:在國外 OAuth 也沒有太多安全可言,最近兩天一個名為reference.me的社交服務(wù)就在濫用OAuth 協(xié)議,用戶只要用 Google 賬戶授權(quán)登錄就會自動向所有聯(lián)系人發(fā)送邀請郵件,大家要注意。