首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

互联网应用里的手机号码应该如何存储

  •  
  •   reid2017 · 7 天前 · 1869 次点击
    现在几乎所有的应用或网站都使用手机号码进行注册,这些服务的后台是如何存储手机号码的,是明文的还是加密的,或者其它方式?
    第 1 条附言  ·  7 天前
    呃呃,大家都觉得我的想法不实际。。

    那,难道微信、微博、淘宝这些大厂里存的用户信息都是明文?
    31 回复  |  直到 2018-06-13 23:31:08 +08:00
        1
    xmh51   7 天前
    明文啊 这个一般不会是密文的。
        2
    opengps   7 天前
    明文,不然怎么搜索
        3
    opengps   7 天前
    我曾经设计过一个系统:
    存储当然还是明文,但是展示时候是 138****8888,然后支持精确查询来区分是不是同一个用户
    目的:
    用这种设计来避免号码被员工恶意拿走(页面上复制,拍照之类的),同时还实现了客服人员确认来电用户身份
        4
    reid2017   7 天前
    @xmh51
    @opengps
    数据库有攻破的风险,存明文的话就会泄漏用户隐私,而且明文的话,有一定权限的运维人员都能看到用户的真实手机号码了
    加密的话,查询和新增都要先做加密解密,确实会比较烦琐。
        5
    opengps   7 天前
    @reid2017 这就是管理层和运营层的问题了,不要传递给后端开发层解决。
    你真把他们全加密了,每次搜索全文解密?
    到时候运营会过来找你:为什么效率这么低???是不是不想干了???
        6
    reid2017   7 天前
    @opengps
    互联网服务绕不开的问题是用户隐私,我使用你的服务,可以给你必要的隐私信息,这些信息仅限于给这个服务提供者使用,你得帮我保管好,不能泄漏出去(滑稽脸),所以如果存明文,一旦数据库被攻破,所有隐私信息都是肉眼可见

    领导说要加密存储,那你也只能在代码里做吧,现在好像还没有可以直接在数据库里实现字段加密的吧
        7
    janxin   7 天前
    你加密了怎么发短信?发短信之前先解密一下吗?
        8
    reid2017   7 天前
    @janxin 是的,类似操作都需要先解密,写入的时候则要先加密
        9
    janxin   7 天前
    @reid2017 你要是对称加密提取一下密钥跟没加密有什么区别?
        10
    chenqh   7 天前   ♥ 1
    这话说的,互联网数据不就是用来丢的吗,那个公司没丢过
        11
    opengps   7 天前
    @reid2017 你应该考虑如何保护你数据库,而不单单是考虑软件加密角度。
    保密等级高的数据库,估计仅仅内网开发,仅仅某些资深员工有权限接触
    何况基于手机号,还是有很多联系的,要不你考虑下脱敏,比如最后 2 位数按照特定规则变换,同时做到好搜和脱敏,手机号单独使用某些外键关联走,这样至少脱裤可也需要花点难度构造原始数据
        12
    x86   7 天前
    那你们所有字段都加密一次好了,怕运维看到
        13
    lcy630409   7 天前
    楼上有位同学说的对,数据库里的资料运维和有数据管理权限的人肯定是可以看到的,,只有不可逆向的加密 才能不被获取到,但是手机号不被逆向了,自己的业务怎么用?
    这个还是管理层的问题,需要下发文件和规划好权限问题
        14
    lcy630409   7 天前
    而且手机号这个东西太有规律性,你不可逆向加密了,只要我知道了加密方式 照样可以字典出来
        15
    opengps   7 天前
    安全是个综合体,别只考虑软件角度,正如楼上所属,能做到脱裤,怎么就不能拿走你源代码或者拿走你网站反编译源代码,最终还是不安全
    你应该考虑各个层面做到自己该做的:
    运维:人员可靠,系统基础漏洞封堵
    开发:写代码注意别漏洞,别前台直接拼 sql 字符,一个 sql 注入拿到数据库
    业务人员:别拍照或者复制页面就能拿走数据库的重要信息,别自己弱密码
    管理层:别停留在表面上,做点实际的比如花钱上安全组件
        16
    yulitian888   7 天前
    SQL Server 2016 新特性了解一下?
    关键词:Always Encrypted
        17
    yulitian888   7 天前
    @reid2017 “现在好像还没有可以直接在数据库里实现字段加密的吧”,答:“有的!运维看到密文,程序读写明文”
        18
    reid2017   7 天前
    @yulitian888 这么高级!可是不用 SQL Server...
        19
    3dwelcome   7 天前
    我们用的是一个自研数据库,每存一条记录,都是加密的。这样就算机房硬盘被人偷走,也不怕。

    如果是常用的 mysql,最好把全文索引作为一个单独模块提取出来。这样存密文,就更不怕脱裤了。
        20
    reid2017   7 天前
    @lcy630409
    其实没什么办法可以完全阻挡一个认真的黑客!或许加密,只是为了增加对方破解成本而已,不会像明文那样肉眼所见即所得。
        21
    reid2017   7 天前
    @chenqh
    所以我加了个(滑稽脸)
        22
    jjianwen68   7 天前 via Android
    手机号码没有那个系统会做加密吧,前台展示做某几位屏蔽不算
        23
    yiqiao   7 天前
    见过一家只要涉及到用户隐私统统都加密后写入数据库中。要取出的时候解密出来
        24
    tadtung   7 天前 via Android
    自然是明文了。你做的话也会明文存储的。

    不过似乎早上有新闻说是 a 站和摩拜被黑,用户数据被泄露,似乎刚刚就有在 tg 卖数据的。
        25
    gamexg   7 天前
    手机号基本是两个用途,
    1.对比是不是一个手机号
    2.发送短信通知

    对于第一点,hash(盐+手机号)可以实现加密,不过为了查询方便,盐需要全站一致。
    对于第二点,只能用加密方式解决了。

    也可以这么做,发送短信部分独立为一个微服务,用户注册时提交用户手机号到微服务,微服务返回一个编号,数据库只保存这个编号,下次发短信提交编号到微服务的方式来发短信。
    微服务内部再实现上密钥加密保存手机号。


    但是我想不会这么实现的,太麻烦了。
        26
    wu181184   7 天前
    可以有专门的加密存储系统,能够根据配置,针对各个服务的各个字段进行加解密,秘钥可以周期性自动更换( KMS 了解下),至于效率,如果用 AES128,有硬件支持( AES-NI 了解下),效率根本不是问题
        27
    whypool   7 天前
    就明文存,简单省事
    至于泄漏,那就泄漏了
        28
    Kilerd   7 天前
    @reid2017 加密数据库有的。 我学校今年的毕设里面有一个题就是加密数据库的搜索方案。
        29
    JCZ2MkKb5S8ZX9pq   7 天前
    我觉得因为能被解密,有漏洞,所以干脆不加密,这个逻辑不成立啊。

    虽然再结实的门都有可能被炸开,但金库的门,用个木头的门加个小插销,显然是不合适的。
        30
    strongcoder   7 天前 via iPhone
    手机号早都泄露几十万遍了
        31
    mingyun   7 天前
    存储肯定明文,显示可以处理嘛
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1193 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 17:13 · PVG 01:13 · LAX 10:13 · JFK 13:13
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1