web低成本的安全登录方案

背景

最近在开发restful风格的数据仓库,使用的是阿里云的函数计算,技术栈是:Vue+Flask(部分用Go),后端API采用restul风格。
由于数据比较敏感,安全系数肯定要比较高才行,但由于我是个人开发,限于成本,只能尽可能的优化代码逻辑,平衡存储和计算成本。

遇到的问题与自己的解决方案

权限管理这个地方,遇到的问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值