目前token存在浏览器localstorage里面,当我把别人的token拷贝到自己电脑上时,可以获取到他的所有权限,后台如何才能防止这种情况呢?
这种问题,只要是基于浏览器来做的,就没有完美解。
首先你需要考虑的是,你的数据是不是如此敏感?
如果是,那么有两个案例可以参考:
网银。大多数网银在登录时都需要安装额外的控件,并配套 UKey 之类的硬件外设使用。浏览器中的 Cookies 仅作为登录态验证,而鉴权是需要 UKey 这种非对称加密证书来确保安全。(你要是说 Cookies + UKey + 密码全都被复制了咋办?这种问题是开发人员需要考虑的吗?报警啊!) 企业支付宝后台 / 微信商户平台。颁发 Token 时会记录访问者 IP,当 IP 发生变化时,Token 作废。此时网页会提示“检测到你的网络环境发生变化,请重新登录”。 上述两个案例,第一种的安全系数最高,但使用门槛也是最高。
第二种相对简单一些,但有两个致命缺陷:1 是同一子网下的设备对外是共用一个公网 IP 的,单从 IP 并不能完全区分出设备是否一致;2 是这种方式只适用于公网 IP 不会频繁变化的固定设备(比如公司电脑),如果你的接口是提供给移动端的,手机的公网 IP 可是会因接入基站不同而频繁变化的,这种情况下还用 IP 来区分,体验是十分糟糕的(想象一下坐一站公交就得重新登录一次的场景吧)。
如果你的数据没那么敏感,但又有一些关键操作需要安全系数更高的验证手段,那么可以考虑二次密码或双因子验证机制。
比如很多支付类 App,其 Token 只能用于访问一些基础接口,一旦需要敏感操作(比如提现、转账),此时需要输入二次密码进行验证。这种设计可以尽可能降低 Token 泄漏的风险。
还有一些安全策略是从用户行为特征分析去入手。比如携带同一个 Token 的请求(假设以 Token 来标定用户),前一分钟还在河北省内,一分钟后的请求却来自广东了,这种情况大概率是有问题的。
但这种手段已经脱离了开发本身,而接近是更上游的流量管控问题了,实现起来也比较复杂,需要大数据集来训练。往往是支付宝、微信支付这类业务场景下采用;或是大众点评、知乎这类有强烈反爬虫需求的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。