摘要:場景主要的場景有如下幾個掃二維碼登錄版系統比如微信版,在手機端微信登錄的前提下,掃二維碼確認,自動登錄網頁版。小結二維碼掃描登錄是個挺潮流的功能,這要求既有系統增加改造,也要求針對這種形式的登錄帶來潛在的攻擊進行安全防范。
序
本文主要來研究一下二維碼登錄的相關場景和原理。
場景主要的場景有如下幾個:
app掃二維碼登錄pc版系統
比如微信web版,在手機端微信登錄的前提下,掃二維碼確認,自動登錄網頁版。這里的app可以分為兩大類,一個是自有的app,一個是第三方的app。
自己的app自有認證體系,在登錄前提下完成pc端的掃描登錄。
第三方app掃描登錄場景,比如使用手機端的微信APP掃描登錄PC端系統,這種情況下,一般是利用微信的oauth體系,服務端完成自有賬戶體系與微信賬號的綁定,然后實現PC端的自動登錄
app掃二維碼作為雙因素驗證
比如微信公眾號平臺,在賬戶密碼登錄PC端的情況下,再使用手機端微信登錄的前提下,掃描二維碼再次確認,登錄網頁版
Secure QR Login (SQRL)
完全使用二維碼登錄,替代用戶密碼。這個有SQRL協議及相關實現。
步驟以下所有的都基于這個前提,就是手機app已經登錄,自帶有登錄的憑證,然后要掃描登錄pc端的系統
打開pc端顯示登錄二維碼(pc端未登錄的前提下)
這個時候請求服務端生成一個登陸二維碼
服務端生成二維碼,該二維碼包含了這個pc端的唯一標識,比如sessionId,或者是新生成一個uuid跟這個sessionId關聯
pc端同時開啟輪詢(有長連接等其他實現,這里以輪詢方式介紹)
獲取二維碼之后,pc端開啟定時輪詢,輪詢二維碼的狀態,主要有如下狀態:NEW,SCANED,CONFIRMED,REFUSED,EXPIRED
手機端掃描二維碼
手機端已經登錄的情況下,掃描網頁二維碼,二維碼狀態變為已掃描,然后手機端跳轉到確認頁面
手機端確認
手機端掃描二維碼之后,點擊確認,二維碼狀態變為確認
pc端跳轉成功/二維碼過期/拒絕
二維碼狀態變為確認之后,跳轉自動登錄,完成PC端登錄態建立PC客戶端
如果app端拒絕這次請求,則二維碼狀態變為被拒絕,不再輪詢
如果二維碼狀態在一定時間沒有變化,則顯示二維碼過期,不再輪詢
請求登錄二維碼
輪詢二維碼狀態
跳到到登陸后的頁面
手機客戶端掃描登錄二維碼
確認登錄
服務端生成登錄二維碼,綁定二維碼與pc客戶端
處理二維碼輪詢
處理手機端掃描二維碼
處理手機端確認二維碼登錄
處理pc端自動登錄
實現 PC端如何自動登錄這個問題相當于同一個帳號多設備同時登錄的問題
在二維碼被具有登錄態的app端掃描確認之后,PC端如何完成自動登錄。有如下幾個方案:
session拷貝
其實就是在原來基于賬號密碼的登錄鑒權邏輯基礎上,新增支持無需賬號密碼的登錄。也就相當于繞過了基于用戶名密碼,內部重新設置了一個登錄態
如果是基于session的鑒權,相當于基于原有的一個已經鑒權的session,拷貝信息到另外一個新的session中,在server端關聯
復用已有token
如果是基于token的鑒權,一種方案就是復用token,讓pc端也復用手機app端的token,這樣的好處是原來基于token的鑒權邏輯都不用改
仿照oauth授權頒發新token
整個過程其實有點像oauth,pc端是client,server端是資源和認證中心,手機端是具有登錄態的用戶。手機端掃描二維碼,然后用戶確認授權,server端給pc端頒發token,然后pc端就可以訪問server端的資源了。這種就在原來的認證基礎上支持另外一類oauth的token校驗,貌似有點復雜二維碼過期
另外一個變形是新頒發token,但跟app端的token有個關聯映射,最終鑒權的時候還去找原來授權的token去鑒權,這樣的好處是原來的token失效,經過它授權的token也失效
一種是基于redis來做過期,一種是使用數據庫,但是設置expired time來判斷
安全問題QRLJacking全稱Quick Response Code Login Jacking,是session劫持的一種。
原理具體是怎么劫持的呢,假設攻擊者將web登錄二維碼偽裝為公眾號二維碼,讓用戶去掃描,用戶一不小心點擊確認,攻擊者的就可以登錄用戶的web系統,或者利用那個token/session去盜取用戶的相關信息或做相關操作。
防范二維碼超時機制
二維碼增加超時機制之后,會增加攻擊者攻擊的難度,不過攻擊者也可能利用腳本去自動刷新二維碼
確認機制
二維碼掃描一定要有這個確認的頁面,明確告知用戶要做的操作,假設沒有確認這個環節,那么是極其容易上當的。另外,二維碼掃描確認之后,再往用戶app或手機等發送登錄提醒的通知,告知如果不是本人登錄的,則建議用戶立即修改密碼
Sound-based Authentication
確認階段改為雙邊語音確認,而不是簡單的用戶點擊確認按鈕。語音是根據用戶id、二維碼id等加密生成,在app端播放,然后pc端語音識別之后才能完成整個登錄過程。這個可以有效防止遠程攻擊。同樣的思路,改語音為one time password也行,增加了確認過程的復雜度,也就增加了攻擊的難度。
小結二維碼掃描登錄是個挺潮流的功能,這要求既有系統增加改造,也要求針對這種形式的登錄帶來潛在的攻擊進行安全防范。
docSQRL (Secure Quick Reliable Login)
掃碼登錄的安全性分析
模擬實現微信掃描二維碼登錄PC網站
Web應用多賬號系統設計及微信掃碼登錄實現
即時通信系統中如何實現:支持PC端和移動端同時在線(即支持同帳號多設備同時登錄)?
Quick authentication using mobile devices and QR Codes
OWASP Qrljacking
QRLJacking:如何劫持快速登陸時使用的二維碼
微信Netting-QRLJacking分析利用-掃我二維碼獲取你的賬號權限
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/11294.html
摘要:前言這個項目是利用工作之余寫的一個模仿微信的單頁面應用,整個項目包含個頁面,涉及實時群聊,機器人聊天,同學錄,朋友圈等等,后續頁面還是開發中。 前言 這個項目是利用工作之余寫的一個模仿微信app的單頁面應用,整個項目包含27個頁面,涉及實時群聊,機器人聊天,同學錄,朋友圈等等,后續頁面還是開發中。寫這個項目主要目的是練習和熟悉vue和vuex的配合使用,利用socket.io實現實時聊...
摘要:對中的數據綁定場景,小伙伴們就再熟悉不過了。比如包下大名鼎鼎的源碼分析的源碼相對來說還是頗為復雜的,它提供的能力非常強大,也注定了它的方法非常多屬性也非常多。并且備注入群字樣,會手動邀請入群 每篇一句 唯有熱愛和堅持,才能讓你在程序人生中屹立不倒,切忌跟風什么語言或就學什么去~ 相關閱讀 【小家Spring】聊聊Spring中的數據綁定 --- 屬性訪問器PropertyAccesso...
摘要:序本文主要介紹下的,也就是定位圖案,用于定位一張圖片中二維碼所處的位置。分類分為三類是和的原型,從到共種尺寸。是的改良版本,添加了對齊標記,從到共種尺寸。這里默認有個的概念,不同的對應不同的尺寸大小。最高,,所以最高是的矩陣。 序 本文主要介紹下qrcode的detect position,也就是定位圖案,用于定位一張圖片中二維碼所處的位置。 qrcode分類 QRCode 分為 Mo...
閱讀 3235·2021-10-13 09:40
閱讀 3710·2019-08-30 15:54
閱讀 1317·2019-08-30 13:20
閱讀 3000·2019-08-30 11:26
閱讀 483·2019-08-29 11:33
閱讀 1106·2019-08-26 14:00
閱讀 2366·2019-08-26 13:58
閱讀 3373·2019-08-26 10:39