发现微博 mobile web 版的登陆接口完全不设防

2017-02-18 16:12:40 +08:00
 fytriht

地址: https://m.weibo.cn 登陆接口: https://passport.weibo.cn/sso/login

不用抓包工具,直接用 chrome dev tools 就可以找到接口,没有验证码(试了几十次没有遇到过), Post 的账号密码数据也没有加密.... 是因为是测试版的缘故吗?

分享一下我模拟登陆的代码:

const superagent = require('superagent')

const weiboLogin = (username, password) => {
  const loginApi = 'https://passport.weibo.cn/sso/login'
  const formData = { username, password }
  const headers = {
    'Referer': 'https://passport.weibo.cn/signin/login',
    'Content-Type': 'application/x-www-form-urlencoded'
  }
  return new Promise((resolve, reject) =>
    superagent.post(loginApi)
      .set(headers)
      .send(formData)
      .end((err, res) => {
        if (err) reject('something went wrong.')
        try {
          const { rawHeaders, text } = res.res
          const cookie = rawHeaders.filter(item => item.startsWith('SUB='))
                           .map(item => item.split(';')[0])
                           .join()
          const uid = JSON.parse(text).data.uid
          if (uid === undefined) reject('wrong password or username')
          resolve({ cookie, uid })  // uid: user ID
        } catch (err) {
          reject('something went wrong.')
        }
      })
  )
}

weiboLogin('username', 'password')
  .then(res => console.log(res.cookie))
  .catch(console.error)

项目地址是 https://github.com/fytriht/weibo-cleaner

7443 次点击
所在节点    信息安全
61 条回复
Kilerd
2017-02-18 16:31:09 +08:00
用了 https 还需要加密传输吗??? 黑人问号
fytriht
2017-02-18 16:41:28 +08:00
@Kilerd 加密的话起码没那么容易实现模拟登录吧
msg7086
2017-02-18 16:58:48 +08:00
@fytriht 加密为什么就不容易了?
shiji
2017-02-18 17:07:01 +08:00
@fytriht 要不你来提一个不容易实现模拟登录的加密方案?
terence4444
2017-02-18 17:13:29 +08:00
我看过一点,它的代码是加了一点点东西的,比如密码的 id 就会加个 4 位随机数字。有时候会跳验证码出来。
laoyur
2017-02-18 17:46:18 +08:00
楼主说的没有加密,应该指的是密码明文
为什么 https 了就可以理直气壮地密码明文了??? 黑人问号
Jaylee
2017-02-18 17:49:28 +08:00
@laoyur 那该怎么做呢? 你说个方案看看?
chinafeng
2017-02-18 17:51:39 +08:00
前端做再多加密, JS 跑一跑, 不就都出来了吗...
laoyur
2017-02-18 18:06:02 +08:00
@Jaylee #7 加密是不能保证被模拟登录,我关注的点是明文密码传输。最理想的情况,我当然希望我的密码不要被明文入库,或者新浪被拖库后我的明文密码不会被爆出来咯
当然如果政策要求或者其他原因得不到这样的保障,我也一点办法也没有。不过这并不妨碍我有“不要明文传输密码”的诉求啊
gouchaoer
2017-02-18 18:12:32 +08:00
web 端登陆 url 没法隐藏的,至于验证码问题只是你登陆不够多,放穷举肯定做了的
miyuki
2017-02-18 18:45:17 +08:00
哇居然有用 Promise
fytriht
2017-02-18 19:13:38 +08:00
@miyuki 什么意思?
Quaintjade
2017-02-18 19:33:22 +08:00
@laoyur
SSL 本来就是让应用层不用操心加密的事。既然是 HTTP over SSL ,那么 HTTP 用明文传输并没什么问题。

你担心明文入库那是另一个问题,和明文传输没必然关系。
如果你信不过网站的人品的话,更好的办法是用密码管理软件给每个网站设不同密码。
billlee
2017-02-18 19:33:35 +08:00
@laoyur https 了还哪来的明文传输?
langmoe
2017-02-18 19:34:19 +08:00
照这逻辑怕是世界上大部分网站都不设防,谷歌登陆的账号密码也是明文 POST 的
验证码没试过不下结论,但是倾向于 10L 的观点,毕竟国内公网 IP 是个稀缺资源,设计上还是得留点空间的
Jaylee
2017-02-18 19:53:01 +08:00
@laoyur 多读书
laoyur
2017-02-18 20:09:23 +08:00
@Quaintjade #13
@langmoe #15
的确明文入库和明文传输没必然关系,明文传输(确切说是原始密码传输)到服务端后,并不能证明服务端就明文入库。但如果能在源头就杜绝了原始密码传输,让其对服务端都不可见,那不是能最大限度防止原始密码被泄漏么。当然,可能我过于理想化了。

@billlee #14 我的意思是原始密码传输,如引起误解请见谅

@Jaylee #16 一言不合就让我多读书,谢谢你的意见,对的,谁都应该多读书。
crab
2017-02-18 20:11:05 +08:00
有验证码的,而且还是手势验证码。你没出现是你号没遇到。
通常没绑定手机,或者异地的号(买来的),就都会有手势。

sina 手机端这边一直都是明文, pc 才有 RSA 。
fytriht
2017-02-18 20:25:37 +08:00
@crab 你说的是手机端是 web 还是客户端? 我测试的是手机端 web 版 ( https://m.weibo.cn) 的登陆接口, 账号绑定了手机非异地的,一直没有遇到过验证码。同一个账号在 pc 端倒是经常要验证码
billlee
2017-02-18 20:25:49 +08:00
@laoyur 理解了。你是指在前端先做一遍摘要,保证服务器根本不会收到口令原文,目的不是为了防止第三方监听,而是网站本身表示自己对用户的口令明文不感兴趣,对吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/341416

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX