随笔-50  评论-74  文章-9  trackbacks-0
  2009年12月13日
今天随便看了下Ucenter和uchome的统一账户机制。感觉设计上面不是很合理.

如果想让某应用a在登录时同时也登录其它挂接到对应ucenter的应用b(入uhome).
那么应该采用synlogin方式.

synlogin方式会让ucenter生成若干条js嵌入脚本.(每个第三方应用对应一条),如下:

<script src="http://host:port/uchome/api/uc.php?code=xxx" />

以uchome为例, uchome/api/uc.php的执行关键过程如下:
1. 从code解编出字段: username, password, uid.
2. 在uchome自身数据库中判断此uid是否存在,如果存在便设置授权cookie.(认为登录成功).



这里头引出了几个问题:

1. 如果用户初次从a站点登录并sync到uchome, 那么uchome自身数据库中是不存在对应账户的,那通过第三方应用登录到uchome的过程会失败.
  除非你显示从uchome登录一次, uchome的登录过程如下:

  1). 从ucenter登录,获取用户信息.

  2). 判断本地数据库是否存在此用户,如不存在则插入用户信息.
关键在第二步, 所以你必须通过uchome的入口才能让新用户插入uchome自身的数据库.

2. 有安全漏洞.

  由于uchome/api/uc.php中的判断只是简单判断uid是否存在, 如果uid存在便认为可以正常登录.
  那么假如我们的账号某次被盗了,只要攻击者记录下那串<script src = "http://host:port/uchome/api/uc.php?code=xxx"/>
  那么后续该用户无论怎么修改密码都无用, 因为uchome的跨应用登录入口api/uc.php根本不检查password,也不与ucenter作通信.
  或者如果你知道了某个uchome应用的UC_KEY, 那么你就可以构造伪造请求来模拟任意用户登录了.

posted @ 2009-12-13 01:56 彭帅 阅读(3146) 评论(14) 编辑
昵称:彭帅
园龄:5年4个月
粉丝:16
关注:2
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

搜索

 
 

常用链接

我的标签

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜