**
思路:
**
- 每個使用者都擁有一個唯一的openid,一個使用者對應一個session_id。
- (公衆号掃碼推事件)掃碼,将這兩個資訊通過微信伺服器發送到開發者伺服器。
- 開發者伺服器将資訊存入緩存或資料庫(存儲格式:session_id => openid).
- 登入頁面可以有一個定時器,定時去查詢session_id對應的openid,查詢到則登入成功!
**
存在的安全隐患
**
攻擊者可以輕易擷取使用者的openid,進而模仿微信伺服器,給開發者伺服器發送模拟的登入請求。這個時候,開發者伺服器做任何加密都無濟于事(已經太遲了),使用者就會有一定損失(使用者非自願登入)。
**
如何解決這個安全隐患?
**
核心思想:登入時,使用者需要自行确認是本人,才可登入成功!
實作思路:
- 使用者掃碼時,不能信任微信伺服器發過來的openid(因為可能會被攻擊者僞造),應該引導使用者進入微信網頁授權頁面擷取openid。(這樣就不會被攻擊者僞造請求了,因為微信伺服器請求,不被程式信任)
- 将授權後獲得的openid和session_id,做存儲。
- 登入頁面定時查詢!