支持微信扫码登录的应用经常会有这个漏洞:你可以将当前页面的二维码发送给其他人,被扫码之后,对方的账号就是你的了。原理很简单:
1)如果你接入的是微信开放平台,扫码登录的时候,你的手机会收到一条通知,提醒你正在登录 xx 应用,相对是安全的。
2)但很多应用为了引导用户关注自己的公众号,会采用「关注了公众号就自动登录」的方式完成接入,大致过程:用户扫码(携带 uuid)→ 微信关注 → 回调给服务器(透传 uuid) → 前端轮训服务器状态 → 完成登录,这个过程是不需要用户确认的。也就是说,拿着微信扫个码,网页就直接自动完成登录了。
那如何避免这个问题呢?其实非常简单,在用户完成扫码关注后,先通过公众号接口给当前用户发送一条消息,让用户回复「确认」后才允许登录。
但是让用户打字很麻烦啊,怎么简化这个过程呢?其实公众号是支持通过这种方式来交互的,通过接口发送的消息体采用如下格式:
确认登录
那么,当用户点击这个链接后,就会自动回复「确认登录」这个文本了,服务端在收到用户的确认文本后,再执行接下来的动作,那这种方式的交互就跟接入微信开放平台的安全水位一致了。
快去看看自己写的代码是不是也有这个风险,赶紧去改掉!
发布于 浙江
