国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

移花接木:針對OAuth2的攻擊

開發(fā) 開發(fā)工具
OAuth的復(fù)雜度比較高,有不少安全方面的坑,開發(fā)者在使用過程中一不注意可能就會掉進(jìn)去,比如說不正確的使用OAuth2可能會遭遇到CSRF攻擊。本文將對這個(gè)安全風(fēng)險(xiǎn)做一個(gè)通俗易懂的解釋。

作為第三方應(yīng)用,為了提升用戶體驗(yàn),往往會提供第三方社交賬號登錄或者綁定的功能,這背后使用到的關(guān)鍵技術(shù)是OAuth認(rèn)證。想要在自己的應(yīng)用里集成OAuth不是難事兒,各大社交網(wǎng)站都提供了詳盡的文檔指南。

OAuth的復(fù)雜度比較高,有不少安全方面的坑,開發(fā)者在使用過程中一不注意可能就會掉進(jìn)去,比如說不正確的使用OAuth2可能會遭遇到CSRF攻擊。本文將對這個(gè)安全風(fēng)險(xiǎn)做一個(gè)通俗易懂的解釋。

OAuth2 授權(quán)模式回顧

在開始之前,讓我們先來回顧一下OAuth2中最典型的Authorization Code 授權(quán)模式,其大致流程如下:

Authorization Code 授權(quán)模式

OAuth2 Authorization Code Flow

我們把OAuth2的整個(gè)認(rèn)證過程大致分為三個(gè)階段。

  • 第一階段主要是向用戶取得授權(quán)許可,對應(yīng)圖中的第1、2、3步;
  • 第二階段主要是申請?jiān)L問令牌(access_token),對應(yīng)圖中的第4、5步;
  • 第三階段就是使用access_token獲取用戶數(shù)據(jù)。

這一過程中涉及了不少敏感參數(shù)和數(shù)據(jù),例如client_secret相當(dāng)于是第三方應(yīng)用自己的密碼,access_token某種程度上來講就是用戶的session id。由于這些參數(shù)以及數(shù)據(jù)極其特殊,我們當(dāng)然得確保它們的安全性,HTTPS加密傳輸以及安全存儲是必不可少的防護(hù)手段。不過僅僅做到這些是遠(yuǎn)遠(yuǎn)不夠的,在這個(gè)流程里存在一個(gè)弱點(diǎn),容易被攻擊者利用進(jìn)行CSRF攻擊。

針對OAuth2的CSRF攻擊

1. 攻擊流程

讓我們來看一個(gè)針對OAuth2的CSRF攻擊的例子。假設(shè)有用戶張三,和攻擊者李四,還有一個(gè)第三方Web應(yīng)用Tonr,它集成了第三方社交賬號登錄,并且允許用戶將社交賬號和Tonr中的賬號進(jìn)行綁定。此外還有一個(gè)OAuth2服務(wù)提供者Sparklr。

模擬攻擊案例中涉及的角色

模擬攻擊案例中涉及的角色

Step 1. 攻擊者李四登錄Tonr網(wǎng)站,并且選擇綁定自己的Sparklr賬號。

Step 2. Tonr網(wǎng)站將李四重定向到Sparklr,由于他之前已經(jīng)登錄過Sparklr,所以Sparklr直接向他顯示“是否授權(quán)Tonr訪問”的頁面。

Step 3. 李四在點(diǎn)擊”同意授權(quán)“之后,截獲Sparklr服務(wù)器返回的含有Authorization Code參數(shù)的HTTP響應(yīng)。

Step 4. 李四精心構(gòu)造一個(gè)Web頁面,它會觸發(fā)Tonr網(wǎng)站向Sparklr發(fā)起令牌申請的請求,而這個(gè)請求中的Authorization Code參數(shù)正是上一步截獲到的code。

Step 5. 李四將這個(gè)Web頁面放到互聯(lián)網(wǎng)上,等待或者誘騙受害者張三來訪問。

Step 6. 張三之前登錄了Tonr網(wǎng)站,只是沒有把自己的賬號和其他社交賬號綁定起來。在張三訪問了李四準(zhǔn)備的這個(gè)Web頁面后,令牌申請流程在張三的瀏覽器里被順利觸發(fā),Tonr網(wǎng)站從Sparklr那里獲取到access_token,但是這個(gè)token以及通過它進(jìn)一步獲取到的用戶信息卻都是攻擊者李四的。

Step 7. Tonr網(wǎng)站將李四的Sparklr賬號同張三的Tonr賬號關(guān)聯(lián)綁定起來,從此以后,李四就可以用自己的Sparklr賬號通過OAuth登錄到張三在Tonr網(wǎng)站中的賬號,堂而皇之的冒充張三的身份執(zhí)行各種操作。

等等,這一切發(fā)生得太快,還沒看清楚李四怎么就登錄到張三的賬號里去了。沒關(guān)系,讓我們從幾個(gè)不同的角度來看看這當(dāng)中發(fā)生了什么。

[[199150]]

2. 受害者張三(Resource Owner)視角

受害者張三訪問了一個(gè)Web頁面,然后,就沒有然后了,他在Tonr網(wǎng)站上的賬號就和攻擊者李四在Sparklr上的賬號綁定到了一起。偽造的請求是經(jīng)過精心構(gòu)造的,令牌申請這一過程在張三的瀏覽器里是非常隱蔽的被觸發(fā)的,換句話講就是,他根本不知道這背后發(fā)生了什么。

3. Tonr網(wǎng)站(Client)視角

從Tonr網(wǎng)站來看,它收到的所有請求看上去都是正常的。首先它收到了一個(gè)HTTP請求,其代表著當(dāng)前用戶張三在Sparklr網(wǎng)站上已經(jīng)做了“同意授權(quán)”操作。其內(nèi)容如下:

  1. GET /bindingCallback?code=AUTHORIZATION_CODE 

不過需要注意的是,URL里的code不是當(dāng)前受害者張三的Authorization Code,而是攻擊者李四的。

當(dāng)Tonr收到這樣的請求時(shí),它以為張三已經(jīng)同意授權(quán)(但實(shí)際上這個(gè)請求是李四偽造的),于是就發(fā)起后續(xù)的令牌申請請求,用收到的Authorization Code向Sparklr換取access_token,只不過最后拿到的是攻擊者李四的 access_token。

最后,Tonr網(wǎng)站把攻擊者李四的access_token和當(dāng)前受害者張三在Tonr網(wǎng)站上的賬號進(jìn)行關(guān)聯(lián)綁定。

4. Sparklr網(wǎng)站(OAuth2服務(wù)提供者)視角

Sparklr網(wǎng)站也是一臉茫然的樣子,因?yàn)樵谒磥恚约菏盏降氖跈?quán)請求,以及后續(xù)的令牌申請請求都是正常的,或者說它無法得知接收到的這些請求之間的關(guān)聯(lián)關(guān)系,而且也無法區(qū)別出這些請求到底是來自張三本人,還是由李四偽造出來的。因此只要自己收到的參數(shù)是正確有效的,那就提供正常的認(rèn)證服務(wù),僅此而已。

5. 攻擊者李四視角

李四偽造了一個(gè)用戶授權(quán)成功的請求,并且將其中的Authorization Code參數(shù)替換成了自己提前獲取到的code。這樣,當(dāng)受害者張三的瀏覽器被欺騙從而發(fā)起令牌申請請求時(shí),實(shí)際上是在用張三在Tonr網(wǎng)站上的賬號和李四在Sparklr網(wǎng)站上的賬號做綁定。

攻擊完成后,李四在Tonr網(wǎng)站上可以通過自己在Sparklr網(wǎng)站的賬號進(jìn)行登錄,而且登錄進(jìn)入的是張三在Tonr網(wǎng)站上的賬號。而張三通過自己在Tonr網(wǎng)站上的賬號登錄進(jìn)去之后,看到的是李四在Sparklr網(wǎng)站上的數(shù)據(jù)。

6. 上帝視角

從整體上來看,這次攻擊的時(shí)序圖應(yīng)該是下面這個(gè)樣子的:

攻擊時(shí)序圖示

攻擊時(shí)序圖示

漏洞的本質(zhì)

這個(gè)問題的關(guān)鍵點(diǎn)在于,OAuth2的認(rèn)證流程是分為好幾步來完成的,在圖1中的第4步,第三方應(yīng)用在收到一個(gè)GET請求時(shí),除了能知道當(dāng)前用戶的cookie,以及URL中的Authorization Code之外,難以分辨出這個(gè)請求到底是用戶本人的意愿,還是攻擊者利用用戶的身份偽造出來的請求。 于是乎,攻擊者就能使用移花接木的手段,提前準(zhǔn)備一個(gè)含有自己的Authorization Code的請求,并讓受害者的瀏覽器來接著完成后續(xù)的令牌申請流程。

前提條件

盡管這個(gè)攻擊既巧妙又隱蔽,但是要成功進(jìn)行這樣的CSRF攻擊也是需要滿足一定前提條件的。

首先,在攻擊過程中,受害者張三在Tonr網(wǎng)站上的用戶會話(User Session)必須是有效的,也就是說,張三在受到攻擊前已經(jīng)登錄了Tonr網(wǎng)站。

其次,整個(gè)攻擊必須在短時(shí)間內(nèi)完成,因?yàn)镺Auth2提供者頒發(fā)的Authorization Code有效期很短,OAuth2官方推薦的時(shí)間是不大于10分鐘,而一旦Authorization Code過期那么后續(xù)的攻擊也就不能進(jìn)行下去了。

最后,一個(gè)Authorization Code只能被使用一次,如果OAuth2提供者收到重復(fù)的Authorization Code,它會拒絕當(dāng)前的令牌申請請求。不止如此,根據(jù)OAuth2官方推薦,它還可以把和這個(gè)已經(jīng)使用過的Authorization Code相關(guān)聯(lián)的access_token全部撤銷掉,進(jìn)一步降低安全風(fēng)險(xiǎn)。

[[199151]]

防御辦法

要防止這樣的攻擊其實(shí)很容易,作為第三方應(yīng)用的開發(fā)者,只需在OAuth認(rèn)證過程中加入state參數(shù),并驗(yàn)證它的參數(shù)值即可。具體細(xì)節(jié)如下:

(1) 在將用戶重定向到OAuth2的Authorization Endpoint去的時(shí)候,為用戶生成一個(gè)隨機(jī)的字符串,并作為state參數(shù)加入到URL中。

(2) 在收到OAuth2服務(wù)提供者返回的Authorization Code請求的時(shí)候,驗(yàn)證接收到的state參數(shù)值。如果是正確合法的請求,那么此時(shí)接受到的參數(shù)值應(yīng)該和上一步提到的為該用戶生成的state參數(shù)值完全一致,否則就是異常請求。

(3) state參數(shù)值需要具備下面幾個(gè)特性:

  • 不可預(yù)測性:足夠的隨機(jī),使得攻擊者難以猜到正確的參數(shù)值
  • 關(guān)聯(lián)性:state參數(shù)值和當(dāng)前用戶會話(user session)是相互關(guān)聯(lián)的
  • 唯一性:每個(gè)用戶,甚至每次請求生成的state參數(shù)值都是唯一的
  • 時(shí)效性:state參數(shù)一旦被使用則立即失效

總結(jié)

要避免遭受本文提到的CSRF攻擊問題,需要第三方應(yīng)用正確的使用state參數(shù),然而縱觀各大OAuth服務(wù)提供者,在其開發(fā)文檔里都沒有明確把state參數(shù)和CSRF攻擊聯(lián)系起來,僅僅只是像下面這樣一句話帶過:

“參數(shù):state

是否必須:否

說明:重定向后會帶上state參數(shù),開發(fā)者可以填寫a-zA-Z0-9的參數(shù)值,最多128字節(jié)”

讓事情變得更糟糕的是,state是可選參數(shù),因此更容易被開發(fā)者忽略,造成安全風(fēng)險(xiǎn)。此外,本文中的攻擊非常巧妙,可以悄無聲息的攻陷受害者的賬號,難以被察覺到。

作為第三方應(yīng)用的開發(fā)者,我們除了參考OAuth2服務(wù)提供者的開發(fā)文檔之外,還應(yīng)當(dāng)加深自己對OAuth2的理解,盡可能的避開這些安全的坑。 而作為OAuth2服務(wù)提供者,也應(yīng)當(dāng)承擔(dān)起提醒開發(fā)者注意防范安全風(fēng)險(xiǎn)的責(zé)任。

【本文是51CTO專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號:思特沃克,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2013-11-12 09:52:38

2010-05-27 13:50:44

Ext JS

2019-09-18 09:06:40

MySQLRedis協(xié)議

2025-06-26 04:11:00

SpringSecurityOAuth2

2013-05-02 14:13:44

Android開發(fā)OAuth2服務(wù)認(rèn)證

2023-08-31 08:34:07

Users對象序列化

2023-08-29 08:00:38

2021-08-29 23:33:44

OAuth2服務(wù)器Keycloak

2022-04-11 07:34:46

OAuth2UAA節(jié)點(diǎn)

2021-08-02 12:50:45

sessiontokenJava

2025-04-29 09:07:21

2025-01-13 08:04:24

2021-11-15 13:58:00

服務(wù)器配置授權(quán)

2020-11-12 09:55:02

OAuth2

2024-06-20 08:20:27

2014-04-21 14:56:45

NodeJSOAuth2服務(wù)器

2025-08-26 04:00:00

2014-09-24 11:47:41

微信企業(yè)號開發(fā)

2025-04-01 05:00:00

OAuth2服務(wù)器身份驗(yàn)證

2022-11-16 14:02:44

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

免费日韩视频在线观看| 美女羞羞视频在线观看| 国产一区二区在线观看视频| 欧美日韩免费观看一区| 老鸭窝91久久精品色噜噜导演| 国产精品12| 日韩精品欧美精品| 国产午夜精品视频一区二区三区| 国产伦理精品不卡| 亚洲人成色77777| 一区二区三区四区在线| 国产在线一二三区| 精品人在线二区三区| 欧美人与性动交xxⅹxx| 欧美另类第一页| 我不卡手机影院| 最新不卡av| 日韩一区欧美小说| 日本免费在线观看| 久久亚洲一区二区三区四区五区高 | av观看在线| 亚洲一区二区久久| 丝袜连裤袜欧美激情日韩| 亚洲一区二区三区香蕉 | 欧美一级黄色录像片| 国产精品日产欧美久久久久| 少妇性bbb搡bbb爽爽爽欧美| 亚洲成人xxx| 亚洲另类春色校园小说| 日本中文不卡| 国产精品人妖ts系列视频| 永久av在线| 久久免费高清视频| 蜜桃伊人久久| 国产乱xxⅹxx国语对白| 日韩一区二区三区免费看 | 精品人伦一区二区三区蜜桃网站 | 色狼人综合干| 日韩欧美三级电影| 亚洲美女在线国产| 成av人片在线观看www| 国产精品第二页| 丁香婷婷综合激情五月色| 免费在线观看麻豆视频 | 午夜免费福利小电影| 福利微拍一区二区| 日韩毛片免费看| 精品国产乱码久久久久久久软件 | 欧美午夜精品在线| 在线欧美激情| 麻豆一区区三区四区产品精品蜜桃| 26uuu成人网一区二区三区| eeuss影院www在线观看| 国模私拍一区二区三区| 奇米影视7777精品一区二区| 麻豆传媒在线播放| 欧美精品videos| 精一区二区三区| wwwww在线观看免费视频| 欧美性受xxxx黑人猛交| 国产91在线看| av毛片在线看| 91大片在线观看| 亚洲日本丝袜连裤袜办公室| 成人做爰视频www网站小优视频| 国产欧美一区二区在线播放| 亚洲免费观看高清在线观看| 日韩电影免费观看高清完整版在线观看| 久久久久久a亚洲欧洲aⅴ| 亚洲成人综合网站| 欧美顶级毛片在线播放| 99在线精品免费视频| 精品久久人人做人人爰| 亚洲精品小说| 国产一级电影网| 久久免费视频在线观看| av中文字幕在线不卡| 亚洲优女在线| 亚洲女人毛片| 欧美浪妇xxxx高跟鞋交| 欧美一区高清| 香蕉影院在线| 成人欧美一区二区三区黑人孕妇| 综合欧美一区二区三区| 97久久亚洲| 人人爽人人av| 久久久久久久97| 国产午夜精品久久久久久久 | 国偷自产一区二区免费视频| 你懂的网址一区二区三区| 欧美性极品少妇精品网站| 国产一区二区精品福利地址| 男女免费网站| 97国产精品人人爽人人做| 中日韩免费视频中文字幕| 一区二区日韩| 成人黄色电影网址| 国产成人av网| 精品久久香蕉国产线看观看亚洲| 欧美精品色图| 亚洲激情文学| 国产乱码精品一区二区三区卡| 日本精品一区二区三区高清| 仙踪林久久久久久久999| 亚洲成人天堂| 精品不卡在线| 制服丝袜国产精品| 九色|91porny| 78精品国产综合久久香蕉| 久久av综合网| 久久中文字幕在线| 综合中文字幕亚洲| 婷婷伊人综合| 91精品国产高清自在线看超| 国产大片一区| 在线视频尤物| 国产精品黄视频| 婷婷综合另类小说色区| 最近中文字幕mv在线一区二区三区四区| 久久国产精品久久久久久电车| 77导航福利在线| 日本在线播放一区| 亚洲国产精品久久久久久| 国产一区二区三区免费观看| 美女一区网站| 久久婷婷五月综合色国产香蕉| 欧美多人乱p欧美4p久久| 亚洲特级片在线| 牛牛国产精品| 一区二区三区性视频| 国产呦系列欧美呦日韩呦| 亚洲成人免费在线视频| 成人短视频下载| 色棕色天天综合网| 都市激情一区| 老司机午夜网站| 色综合视频一区中文字幕| 五月综合激情网| 蜜臂av日日欢夜夜爽一区| 欧美日韩伦理一区二区| 成人女人a毛片在线看| 91精品视频专区| 亚洲精品成人久久电影| 国产日韩欧美制服另类| 久久久久午夜电影| 欧美日韩五码| 日本一二三区视频免费高清| 国产一区二区中文字幕免费看| 亚洲欧美日韩图片| 亚洲综合无码一区二区| 奇米四色…亚洲| 欧美一级一片| 欧美wwww| 日本免费看黄色| 国产91av视频在线观看| 人人做人人澡人人爽欧美| 91精品国产91久久久久久一区二区 | 久久精彩免费视频| 欧美日韩中文字幕| 国产黄色精品视频| 欧美激情成人| 成人免费黄色| 国产高清在线观看| 成人免费无码av| 欧美日本亚洲| 国产成人精品日本亚洲专区61| 亚洲国产精品成人精品 | 狠狠狠综合7777久夜色撩人| www.欧美黄色| 国产精品国产三级国产专区53| 久久艳片www.17c.com | 国产电影一区二区三区| 日韩av有码| 99精品在免费线偷拍| 日韩成人黄色| 久久综合久久色| 涩涩日韩在线| 国产精品高潮粉嫩av| 亚洲欧美国产一区二区三区| 一本久道久久综合中文字幕 | 欧美乱妇高清无乱码| 欧美一区二区三区四区五区| 中文字幕不卡三区| 国产精品99久久久久| 国内一区二区三区| 妖精一区二区三区精品视频| 精品丝袜在线| 在线观看免费高清完整| 加勒比在线日本| 亚洲 欧美 日韩 国产综合 在线 | 四虎影院观看视频在线观看| 女人体1963| avav在线看| 亚洲国产一二三精品无码 | 2019中文字幕免费视频| 国产亚洲人成a一在线v站| 5566中文字幕一区二区电影 | 69av在线| 中文字幕不卡免费视频| v888av成人|