之前都没有仔细想过用户管理这里有这么多需要考虑的部分。
用户通过账号以及密码来登陆,这里的机制对于安全的设置也值得研究。
最重要的是密码的管理。
密码可以通过暴力攻击等方式来进行。或者像之前CSDN出现的问题,由于使用明文存储,导致破解后的灾难。亦或者是做映射关系。比如在A网站使用这个邮箱和密码,在另一个B网站也使用同样的账号和密码。那么这两个网站其中一个被破解了,也会导致另一个网站资料的泄漏。
所以,密码要实施强密码。诸如限制长度,不允许密码中出现用户名等等方式,要求具有一定的复杂性。太简单的密码容易被暴力攻击等破解。甚至是用户的“About Me”页面,收集用户的子女姓名、生日等信息进行猜测,破解。
还有就是空闲账户的控制,空闲账户,只较少登陆但有效的账户。由于较少登陆,他们难以发现账号被盗用。要限制这些空闲账号。如逾期失效等。
那么就要对密码进行管理了。
存储密码有三种,明文,密文,单向密码哈希。最后一种最好。因为密钥也有可能会泄漏。
当密码丢失时,不要实际找回密码(以防欺骗等),而应该只是设置或重置密码。
同时,应该为密码设置时效性。针对不同的应用场景,时效又应该不同。
并且,应该保存密码历史记录。防止用户在两三个密码间相互交替等情况。这也不是很安全。
尽量不要分配临时密码。因为临时密码比较简单(如账户号+几个数字),这样子很多用户会懒得更改。或者,强制要求用户新登录时,必须更改临时密码。或者临时密码足够复杂,难记。
很多修改密码时,使用提示问题。这应该成为一个辅助手段,而不应该是主要手段。因为用户信息,容易在网上获取到。而且有些内容,容易暴力破解。比如母亲姓氏、最喜爱的电影等等。这些答案范围可以限定。可以用多个的组合,比如喜欢的男艺员,女艺员,变性艺员作为一个问题。不建议使用用户自定义的。因为一般用户不清楚哪些问题安全性高。避免很多人都会选择相同答案的问题。