阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

“记住密码”功能功能的隐患

48次阅读
没有评论

共计 1325 个字符,预计需要花费 4 分钟才能阅读完成。

导读这个功能简直就是一个安全隐患,我觉得并不是所有的程序员都知道怎么设计这个事。一般的设计 是——一时用户勾选了这个功能,系统会生成一个 cookie,cookie 包括用户名和一个固定的散列值,这个固定的散列值一直使用。

这样,你就可以在所有的设备和客户上都可以登录,而且可以有多个用户同时登录。这个并不是很安全。下面是一些更为安全的方法供你参考:

1 在 cookie 中,保存三个东西——用户名 登录序列 登录 token

a)用户名:明文存放。
b)登录序列:一个被 MD5 散列过的随机数,仅当强制用户输入口令时更新(如:用户修改了口令)。
c)登录 token:一个被 MD5 散列过的随机数,仅一个登录 session 内有效,新的登录 session 会更新它。

2 上述三个东西会存在服务器上,服务器的验证用户需要验证客户端 cookie 里的这三个事。
3 这样的设计会有什么样的效果,会有下面的效果,

a)登录 token是单实例登录。意思就是一个用户只能有一个登录实例。

b)登录序列 是用来做盗用行为检测的。如果用户的 cookie 被盗后,盗用者使用这个 cookie 访问网站时,我们                  的系统是以为是合法用户,然后更新“登录 token”,而真正的用户回来访问时,系统发现只有“用户                                名 ”和“ 登录序列 ”相同,但是“ 登录 token”不对,这样的话,系统就知道,这个用户可能出现了被盗用的                        情况,于是,系统可以清除并更改 登录序列 登录 token,这样就可以令所有的 cookie 失效,并要求用                        户输入口令。并给警告用户系统安全。

4 当然,上述这样的设计还是会有一些问题

比如:同一用户的不同设备登录,甚至在同一个设备上使用不同的浏览器保登录。一个设备会让另一个设备的 登录 token 登录序列 失效,从而让其它设备和浏览器需要重新登录,并会造成 cookie 被盗用的假象。所以,你在服务器服还需要考虑 - IP 地址,下面涉及到三个问题。

a) 如果以口令方式登录,我们无需更新服务器的“登录序列 ”和“ 登录 token”(但需要更新 cookie)。因为我们认为口令只有真正的用户知道。

b) 如果 IP 相同 ,那么,我们无需更新服务器的“ 登录序列 ”和“ 登录 token”(但需要更新 cookie)。因为我们认为是同一用户有同一 IP(当然,同一个局域网里也有同一 IP,但我们认为这个局域网是用户可以控制的。网吧内并不推荐使用这一功能)。

c) 如果(IP 不同 && 没有用口令登录 ),那么,“ 登录 token”就会在多个 IP 间发生变化(登录 token 在两个或多个 ip 间被来来回回的变换),当在一定时间内达到一定次数后,系统才会真正觉得被盗用的可能性很高,此时系统在后台清除“登录序列 ”和“ 登录 token“,让 Cookie 失效,强制用户输入口令(或是要求用户更改口令),以保证多台设备上的 cookie 一致。

我觉得这是一种不错的方案,cookies 被盗的假象甚至可以“弄巧成拙”地实现——QQ 的后来登录用户挤掉之前的登录用户这样的功能。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1325字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中