前些日子我司的一款面向B端用户的后台系统,出现账号密码被盗,异常发送了万条广告短信,幸亏发现及时没导致白花花的银子继续浪费。
这个风波出现后,我立刻开启了对平台账号密码登录这块地毯式搜索,先来看看之前对账号密码安全这块采取了什么安全防范策略,遗憾的时,一条都没有,更可怕的是,密码的传输还是明文(此时深深的吸了一口气)。 此时,想说一句,看似简单的登录并不是你想象的那么简单。
背景简介
用户账号是系统根据手机号 + 密码(默认手机号后6位)自动创建,无需用户主动注册。 无论从密码的复杂度、还是其他方面,这样的结构都是极易被破解的。
若需要对账号安全性做相关策略的思路,需要先梳理出账号密码可能存在怎么样的异常操作行为,针对各种情况做针对性的安全策略。
安全防范策略
情景1:密码过于简单,可能被尝试多次就被破解的场景
策略1:增强安全密码强度,增加密码复杂度
你可对密码的组成设定以下规则:
a)、密码长度,8~32位;
b)、密码有字母、数字、符号至少2位以上组成;
c)、密码不能出现3位以上的连续正序或倒序数字或字母;
情景2:为了避免网络抓包获取账号、密码等场景
策略2:密码账号传输加密 MD5加密
客户端与服务端API传输信息的过程中,对账号、密码信息做MD5加密处理。
情景3:账号、密码已泄露,避免别人登录操作等场景
策略3:登录成功后,向用户推送微信消息提醒,若非本人操作,可强制退登操作
登录成功后,可通过推送让账户本人知晓,什么时间在什么IP登录网站,若非本人操作,提醒用户做强制退登、修改密码、联系系统方人员等操作,来阻止异常操作。
情景4:若用户登录系统操作一段时间,因其他原因离开不操作了,避免别人趁机操作
策略4:对已登录账号连续N小时不操作,需要重新登录
N可依据业务对安全性要求的强弱而定,一般30分钟。
情景5:区分登录操作行为是人为还是程序脚本机器行为
策略5:登录操作的关键行为点,添加如滑块、图片等行为验证码
情景6:确定操作者是用户本人
策略7:手机动态验证码机制
a)、30天以上未登录过系统的用户,首次登录须短信验证;
b)、针对PC端,采用陌生IP短信验证机制,即用户登录时判断该用户在该IP是否有成功登录系统记录,无则需要短信验证;
c)、密码出错短信验证机制。同一账号登录时,账号密码20分钟内连续错误5次,则将账号锁定30分钟,解锁后再次登录即需要短信验证码;
d)、修改密码须短信验证。
情景7:为了保证沉默账户或预防账户被盗
策略7:建议修改密码
a)、连续三个月未修改过密码,建议修改密码
b)、两次登录时间超过半年以上,建议修改密码
情景8:监测异常行为
策略8:监测到异常IP进行封锁,非人为所能达到的操作异常监测
a)、同一IP,登录次数超过20次,对该IP进行封锁不可访问
b)、一分钟内登录次数超过20次,可能非人为操纵