web低成本的安全登录方案
背景最近在开发restful风格的数据仓库,使用的是阿里云的函数计算,技术栈是:Vue+Flask(部分用Go),后端API采用restul风格。由于数据比较敏感,安全系数肯定要比较高才行,但由于我是个人开发,限于成本,只能尽可能的优化代码逻辑,平衡存储和计算成本。遇到的问题与自己的解决方案权限管理这个地方,遇到的问题是否开放账号密码注册的方式?我参考了国内多数app/web应用,发现相当一部分仅
·
背景
最近在开发restful风格的数据仓库,使用的是阿里云的函数计算,技术栈是:Vue+Flask(部分用Go),后端API采用restul风格。
由于数据比较敏感,安全系数肯定要比较高才行,但由于我是个人开发,限于成本,只能尽可能的优化代码逻辑,平衡存储和计算成本。
遇到的问题与自己的解决方案
权限管理这个地方,遇到的问题
- 是否开放账号密码注册的方式?
我参考了国内多数app/web应用,发现相当一部分仅开放了手机号验证注册/登录,或者开放第三方如微信/支付宝之类的,但是最后还是要绑定手机,于是我想了下,就仅开放外部用户使用手机号注册登录,但是还是以账号为用户的唯一标识,同过手机号注册的,初始化一个账户即可;另外自己留一个接口可以直接生成账号,不用绑定手机号,登录方式还是账密/手机号登录。 - 恶意批量使用手机号申请验证码,导致短信验证码套餐消耗量过大的问题
这个无法杜绝,只能让其成本大于我的成本即可,看了下,一个网易的行为验证码也就一万多一年,前期不限制,业务有点起色了,加上就行了,不限量,但是限制QPS,我多花一万块钱,对方可能需要花10万 - token登录的安全性问题
理论上用户登录后,返回携带用户信息的token,加上https防止中间人攻击,就可以有效遏制大部分安全问题,且不需要服务端存储token。但有一点很烦,仅仅通过客户端存储token只能验证其正确性和时效性。那加入你的账号密码泄露,异地登录,单用token就无法解决了,我的解决方式是将客户端的ip一并添加到token的载荷,token验证/续约的时候对请求的ip与载荷中的ip一起校验,不通过则。由于DHCP租期比较长,一次登录期间很小概率会出现租约到期导致IP地址变动问题,因此问题不大
*补充:又想到一个场景,跨省/跨地区前后,ip一定会变,这个后面再考虑。 - token续约问题
看了好多回答,想不通为什么需要用redis,用在请求验证上,过于浪费,基于上面的第3条,可以确定token的安全性,那我对请求的生命周期做判定,小于某个时长,在响应头中携带新的token,js拦截器判定有这个头,就刷新本地的存储的token不就ok了? - 手机验证码二次校验问题
用的是网易云盾,流程是:第一次请求,发送验证码,云盾返回requestId,第二次,携带requestId+验证码,进行校验。
这个用在注册场景上,第二次客户端发给服务端是需要携带注册信息的,比如手机号。
那么假设我第二次请求,更改了手机号,但验证码和requestId都保持正确,那么服务端收到的手机号就是错误的,但验证是通过的。
这时可以在第一次请求中,将requestId与手机号放入token的载荷中,返回给客户端,第二次客户端直接将这个token与其他信息一起发送至服务端
更多推荐
已为社区贡献1条内容
所有评论(0)