天天看點

關于微信(公衆号)掃碼登入

**

思路:

**

  1. 每個使用者都擁有一個唯一的openid,一個使用者對應一個session_id。
  2. (公衆号掃碼推事件)掃碼,将這兩個資訊通過微信伺服器發送到開發者伺服器。
  3. 開發者伺服器将資訊存入緩存或資料庫(存儲格式:session_id => openid).
  4. 登入頁面可以有一個定時器,定時去查詢session_id對應的openid,查詢到則登入成功!

**

存在的安全隐患

**

攻擊者可以輕易擷取使用者的openid,進而模仿微信伺服器,給開發者伺服器發送模拟的登入請求。這個時候,開發者伺服器做任何加密都無濟于事(已經太遲了),使用者就會有一定損失(使用者非自願登入)。

**

如何解決這個安全隐患?

**

核心思想:登入時,使用者需要自行确認是本人,才可登入成功!

實作思路:

  1. 使用者掃碼時,不能信任微信伺服器發過來的openid(因為可能會被攻擊者僞造),應該引導使用者進入微信網頁授權頁面擷取openid。(這樣就不會被攻擊者僞造請求了,因為微信伺服器請求,不被程式信任)
  2. 将授權後獲得的openid和session_id,做存儲。
  3. 登入頁面定時查詢!