[转]怎样才是合格的"记住密码"实现

[转]http://www.zhihu.com/question/20218136/answer/16246633

1. 首先用户基本能够完成自动登陆流程
重新启动客户端/浏览器, 不需要输入密码可以登陆
重启设备后依旧可以自动登陆

2. 用户更换网络环境自动登陆有效
同一设备采用有线网络,无线网络,临时中断网络不影响规则1的逻辑
*安全系数较高的业务可能对ip有自动进化的白名单, 此时规则2呈受限状态

3. 用户更改密码后原有的自动登陆失效(包括且不限于本机的自动登录)
保证被盗用后/在其他机器上登陆过的信息可以远程"挂失"

4. 可取消
用户的登出(明确的Logout)操作使原有的自动登陆失效(包括且不限于本机的自动登录)
并且可以关闭自动登陆/记住密码
重新安装软件/客户端必须是失效的(否则你手机卸载了陌陌,回家老婆重装一次居然可以自动登陆,后果就....)

接下来是安全层面的讨论

5. 不可逆(针对本地的token/票据/认证)
token(理论级)不可逆向出除用户id以外的信息,包括不限于 账号,密码,登陆ip

6. 不可猜测/碰撞
简单测试:当存在100w有效token时,token值域内随机生成1w个新token不能出现碰撞
为什么是1w个? 因为token的验证是需要有网络开销的. 当短时间内出现1w个密集请求的时候如果你还不能发现攻击, 只能说明你的系统监控太差了(连流量图上都该出突尖了)

7. 有时效性
token不可以长期不变可用, 否则规则6将会在可预见的时间内失效
推荐不超过1个月(现在已经大都是1周). 具体可以参考各个站点的设计
如果需要长期保留可以采用换票(重新签发新的token)的方式来延续自动登陆

8. 不可被拦截盗用*
假设当前网络为非安全信道, 消息可被监听. 监听者盗用token不能使用.或者监听者无法盗用token(不能从网络包中分析出具体的token). 简单说就是采用https协议可以快速透明的解决问题

.

以下提供几个简化的版本, 建立在黑客没有刻意针对服务进行攻击的前提下, 做到基本的保护. 这样盗用的门槛则提高到,加密代码被获取进而解密的门槛高度.
标准版:常用ip白名单
其中规则2的高级情况也可以起到一定程度的限制作用, 但无法抵御对大型区域网路(公司网络, 学校网络, 小区网络)内的攻击.
廉价版(https是要钱的): token拥有时间戳信息加密.即通信层面上的token是每次都在变化的
可达到屏蔽公共wifi这类实时全面截包进行攻击的情况
极简版:token每5min换票一次.
可达到非全面截包(局域网出现临时的arp攻击这类)情况下, token被发送到攻击者邮箱后, 未来某一时刻被利用来攻击的情况.
建议
规则1~4是最基本的, 完成不了的根本就不达标
对于尚未拥有可观收益的服务, 只要完成1~6就够了. 属于及格状态. 能攻击的人不来攻击, 这个服务就可以说是"绝对安全"了
反之则连规则8也得完成. 属于良好状态

终极规则9
社会工程学层面的安全防御.(应对所有已知的即将知道的软件/框架/协议漏洞 )
到达此级别的必须得是可以上市级别的公司(或者有实力巨额出售自己)提供的服务了. 当网络上出现高手通过特殊手段(比如最近的Heartbleed漏洞)直接获取到token信息甚至是密码时, 可以

第一时间的得到白帽(乌云/圈子里)的帮助与支持.甚至是收买说服将要攻击的黑客. 达到这个标准的才可以成为真正优秀的状态.

究极规则10
推卸责任(应对出现撞库攻击的情况 如最近的iCloud,Gmail)
当服务出现安全问题, 并已经产生严重后果/损失时. 找到公关部门,发布安全公告, 发表声明, 严厉谴责漏洞利用者. 并一定要说明,同行现在差不多都是这个样子,不会好只会更差.最好能说

成是全世界的厂商都有这个问题. 可以的话说明一下人类的智慧暂时不能解决这个问题也是可以的. 顺带附上一个很小的数字, 说他们是受到影响的. 我们已经通知他们改密码了. 至于损失

的赔偿么, 游戏公司的运营可以考虑一下. 其他企业不建议给, 否则有认错被抓把柄的风险.
当达到这个状态时, 差不多可以说"Everything Is Under Control"了. 完美状态.

时间: 2024-12-27 22:20:48

[转]怎样才是合格的"记住密码"实现的相关文章

Android实战(一)学习了多个控件实现登录及记住密码功能

首先确定一下需要的控件: 两个EditText:用于输入账号和密码 一个button:用于登录查看账号和密码是否正确 一个checkbox:用于记住密码和账户 一个Androidstudio:用于编写代码,当然牛逼的人也推荐使用记事本写代码,废话不多说开工. 创建一个App项目加入两个布局两份Java.class ,在Androidmanifest.xml里面注册第二个布局. 准备完毕 1.在初始布局中加入上述控件,并为其设置好id 代码如下所示 <LinearLayout xmlns:andr

记住密码&quot;功能的正确设计

eb上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关系到用户安全的功能,希望大家能从下面的文章中能知道什么样的方法才是一个好的用户登录功能. 用户名和口令 首先,我们先来说说用户名和口令的事.这并不是本站第一次谈论这个事了.如何管理自己的口令让你知道怎么管理自己的口令,破解你的口令让你知道在现代这样速度的计算速度下,用穷举法破解你的口令可能会是一件很轻

转载 C# WINFORM 记住密码

转载自: http://blog.csdn.net/gatieme 背景 Winform实现登录窗体中记住密码的功能,模仿QQ登录记住密码的实现 如下图所示,其中标题部分因为项目保密的原因,我加了马赛克,请大家见谅.  用户名输入框我们采用下拉列表框ComboBox 密码框我们采用textBox,并设置为密码框 设置textBox输入时不显示明文,需要将useSystemPasswordChar改为true,然后multiline设置为false,然后重新生成一下就可以了,因为textbox为显

Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)

原文:http://blog.csdn.net/liuyiming_/article/details/7704923 SharedPreferences介绍: SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置参数,它是采用xml文件存放数据的,文件存放在"/data/data<package name>/shared_prefs"目录下. SharedPreferences的用法: 由于SharedPreferences是

SpringMVC记住密码功能

CookieTool (Cookie帮助类): package com.utcsoft.common.cookie; import java.util.HashMap; import java.util.Map; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Coo

android: SharedPreferences实现记住密码功能

既然是实现记住密码的功能,那么我们就不需要从头去写了,因为在上一章中的最佳实 践部分已经编写过一个登录界面了,有可以重用的代码为什么不用呢?那就首先打开 BroadcastBestPractice 项目,来编辑一下登录界面的布局.修改 login.xml 中的代码,如下 所示: <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="mat

(转)业务系统实现记住密码和自动登录功能

公司的业务系统本来是受域控的,用户不需要登录可以直接访问系统.当然,虽然不用人工登录,系统本身会读取电脑的用户名为登录标识,对系统操作权限和记录也是以电脑名.近段时间,由于系统要牵到云端,也就是不受域控了,那就需要每人手头上都有账号和密码了,这个和一般的业务系统没什么区别.但是由于用户之前的习惯是不用登录的,而且每天打开关闭的次数较多.OK,一般的系统登录都会有个记住密码的功能,但是,这还满足不了用户的需求,那么我们给用户增加多一个自动登录功能,类似QQ那样,我上次访问勾选了自动登录功能,然后再

Android自动登录与记住密码

// 获取实例对象 sp = this.getSharedPreferences("userInfo", Context.MODE_WORLD_READABLE); rem_pw = (CheckBox) findViewById(R.id.cb_mima); auto_login = (CheckBox) findViewById(R.id.cb_auto); // 判断记住密码多选框的状态 if (sp.getBoolean("ISCHECK", false))

Android记住密码自动登录的实现

我采用的是SharedPreferences来存取数据的,所以先简单的介绍一下SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置参数,它是采用xml文件存放数据的,文件存放在"/data/data<package name>/shared_prefs"目录下. 获取SharedPreferences的两种方式: 1 调用Context对象的getSharedPreferences()方法