关于用户隐私信息储存方案

weplus

问题描述

我在处理用户敏感信息时,手机号码明文脱敏,真实的手机号码哈希算法bcrypt。

mobile = [
    'value' => '*******2888',
    'key'   => '$2y$10$QnBgZNXxIEWa0q9yuBx.jePU8u6yUlQx8JGn0M19AtJk9d8unZjo2'
];

前端需要展示用户手机号码的地方直接用value,敏感操作需要发短信的时候需要用户补全脱敏的字符提交后由后台进行验证,通过验证后触发短信。用户登录情况下除了多一步输入完整的手机号步骤以外没啥问题。
短信接口使用大厂的接口,尽量保证用户隐私安全。
这样搞坏处是我都不知道用户的真实手机号码了。

问题

在用户未登录的情况下我怎么判断用户的手机号对应的是哪一个账号呢?????

以前做微商的时候吃过亏,用开源项目做了一个商城。手机号是明文的。后来数据库被扒了,同一个团队下的多个代理被电信诈骗了。。。过了好久被叫过去了解情况,挨了一顿批,说没有能力保护用户隐私就不要收集用户信息,再出现安全问题就要被处罚了。

858 10 0
10个回答

weplus

我也是脑子生锈了,刚发完问题自己再看一遍的时候,想到在用户未登录的情况下进行正常登录操作,提交账号密码后检测到异常行为时跳转到短信验证页面,提示信息给出用户已经脱敏的手机号码,当用户输入完整的手机号码时系统下发短信。验证通过后登录成功。

登录接口加了限制请求频率

这样还可以避免短信接口被刷。前段时间北京不是有一家公司短信接口被刷了1300多万次,数据泄露300多万条数据泄露

作为开发者一定要保护用户隐私啊~~~

  • 暂无评论
weplus

测试又遇到新问题。就是没有办法保证手机号码唯一性了。
会导致同一个手机号绑定多个账户的情况。换个角度看既然是为了保护用户隐私,手机号只是作为一个辅助验证的工具。允许多个账号绑定同一个手机号好像也没啥问题。至于重复注册倒不需要担心什么,哪个系统没有大量僵尸号,人家愿意我们也没必要管那么多啊。有些营销场景要防薅羊毛的再单独做策略就好了。

为了用户隐私,各位路过的大佬有好的建议吗?

  • 暂无评论
weplus

睡觉迷迷糊糊的在跟人争论关于开发者为什么看不到手机号码的问题,爬起来补了一个加解密逻辑,秘钥和加解密函数不放到代码中,单独维护一套独立的服务,后端请求返回,遇到必须要看某一个用户的手机号码时再解密。

这样做可以最大程度上保证用户的隐私信息。即使数据库泄露,攻击者也不太可能还原出信息,除非继续撞或者攻击者同时拿下所有伺服器。

但还是不想留方法来还原数据,这样没有真正意义上解决用户隐私问题。
有时候我甚至在想,到底是什么原因我们一定要知道用户更多的信息吗????

  • 暂无评论
wocall

你是好同志

  • 暂无评论
胡桃

手机号不是密码,保存明文完全没问题,充实不了社工库,数据库被扒首先考虑是服务器或者数据库端口对外开放,并且是弱密码甚至无密码。

实在担心就用非对称加密,不过如果你的服务器已经被第三人控制了,那再怎么加密也是徒劳。

短信接口使用大厂的接口,尽量保证用户隐私安全。国内所谓的大厂早已把你的个人信息包括性别、年龄、职业、收入、家庭及人际关系、消费能力、兴趣爱好偷偷记录下来,并且打包卖给全世界的广告公司。这句话有点地狱笑话的感觉。

MarkGo

只要我不记录,我就安全......
据我所知大厂的脱敏并不是底层不记录,数据库该记录啥还是照常记录;
只是查看数据和接口返回处,对敏感数据进行脱敏处理而已....
你说之前被脱裤了,那解决问题应该是理清楚在哪里存在问题然后修复吧.........

  • 暂无评论
rui6ye

如果是我要加密 我会选择aes加密 ,用业务代码混淆aeskey后 存储于另外一个表
解密方法也是在业务代码里,哪怕是拿到服务器代码,不花个半天时间也找不到电话对应的解密key在哪个表。

  • 暂无评论
ichynul

主要问题是被脱裤子,而不是那话儿大小问题

  • 暂无评论
ak47f16200

最终怎么解决的呢?如果加密存储,模糊查询怎么处理的?

  • weplus 2024-01-03

    Eloquent ORM 使用 where 方法结合 like,只能查后4位。

  • weplus 2024-01-03

    初衷是保护用户隐私,想让加密后的数据不可逆。做了一些牺牲,对用户来说只有找回账号密码体验不好以外其他的都还好。绑定手机只是多了一个辅助验证的方式。用户主要操作还是要基于账号。或者是做一些扩展绑定邮箱、2fa。敏感操作触发风控就要求用户短信验证或者安全级别高的2fa验证。

  • weplus 2024-01-03

    这样做管理员也无法知道用户的手机号码是什么,后4位可能会有相同的情况。如果是售后什么的可能要根据其他信息来判断。
    还有就是同一个手机号可能会绑定多个账号的情况,不建议仅使用手机号进行登录。但可以通过手机号找出该手机号曾经绑定过的账号。这个过程需要将用户的手机号跟所有账号进行验证(不效率)。
    如果用户忘记账号或者密码。使用手机号找回账号是找回所有账号,用户提交找回时除了提交手机号以外还要提供安全的电子邮箱,然后通过event事件处理。等处理完自动给用户发送邮件。在邮件中点击链接进入,然后选择账号进行重置密码。

  • weplus 2024-01-03

    用户通过手机号找回账号密码,我先模糊查询后四位,然后将用户提交的手机号跟密文进行校验。

  • ak47f16200 2024-01-19

小吴大大

手机号码不用加密的,主要在于数据库安全。涉及到显示手机号的接口时,记得做脱敏处理,不要把完整的手机号码显示出来就行。感觉楼主属于一朝被蛇咬

  • 暂无评论
🔝