登录功能模块的设计需要注意一下几点:
1、登录名+密码:这种方式简单有效,破解成本低、高危。
2、登录名+密码+验证码:这种方式确实可以过滤一些非法攻击,但普通的图片验证码很难防止机器人攻击。
3、登录名+密码+登陆限制:登录名密码错误达到一定次数时、拒绝用户登录,隔一段时间在恢复,这种方式可以解决被爆破的问题,但迎来另一个风险即攻击者可以让所有用户都无法登陆(登陆限制)。
4、登录名+密码+ip限制:获取登陆ip在登陆错误次数达到一定时进行封ip,但使用同一ip的会被误杀或切换vpn进行攻击。
5、登录名+密码+手机验证:当错误次数到达一定是、弹出手机验证,需要用户使用手机验证和密码双重认证进行登录,结合上面的方式同时加上手机验证码的验证模式,可以阻止相当多的一部分恶意攻击者。
但是没有系统是绝对安全的,我们只是尽可能的增加攻击者的攻击成本。大家可以根据自己的实际情况选择合适的策略。
值得一提的是中间人攻击?
中间人攻击,简单的来说就是,A和B在通讯过程中,攻击者通过嗅探、拦截等方式获取或修改A和B的通讯内容。
AS:小白给小黄发快递、途中要经过快递点A,小黑就藏在快递点A或者干脆自己开一个快递点B来冒充快递点A,然后偷偷的拆了小白给小黄的快递,看看里面啥东西甚至可以把小白的快递留下自己在打包一个一样的箱子发给小黄。
在登录过程中如果攻击者在嗅探到客户端发往服务端的登录请求,就可以很轻易的获取到用户的用户名和密码。
HTTPS
防范中间人攻击最简单也是最有效的一个操作,更换HTTPS,把HTTP更换为HTTPS。
HTTPS实际上就是在HTTP和TCP协议中间加入了SSL/TLS协议,用于保证数据的安全传输。
优点:内容加密、数据完整性、身份验证
在HTTPS之外,我们还可以手动对敏感数据进行加密传输:
1、用户名可以在客户端使用非对称加密,在服务端解密
2、密码可以在客户端进行MD5之后传输,防止暴露密码明文
除了上面的这些以外,其他的也可以考虑,如:
1、操作日志:用户的每次登录和敏感操作都需要记录日志
2、异常操作或登录提醒:基于日志做风险提醒,如用户在进行非常登录地登录、修改密码、登录异常时,可以短信提醒用户
3、拒绝弱密码:注册或修改密码时,不允许用户设置弱密码
4、防止用户名被遍历:需要在交互或逻辑上做限制(在输入完用户名之后会提示用户名是否存在、这样会存在用户名被泄露的风险)