美文网首页
互联网公司如何安全的存储用户信息

互联网公司如何安全的存储用户信息

作者: 俊杰的笔记 | 来源:发表于2017-03-22 15:02 被阅读154次

    原文地址:
    https://blog.eood.cn/security-service

    摘要:之前的文章提到了个人的安全注意事项,并且简单提到了互联网公司的安全注意事项。这篇文章注意谈一谈如何存储重要的明文信息。

    互联网公司如何安全的存储用户信息

    之前的文章提到了个人的安全注意事项,并且简单提到了互联网公司的安全注意事项。这篇文章注意谈一谈如何存储重要的明文信息。
    通常情况下,密码的存储通过单向加密算法实现。比如在 20 年前可以使用人人皆知的 MD5 算法加密,现在可以使用 Bcrypt 算法加密。这样用户登录的时候,只需要对比明文的 HASH 是否一致即可判断密码的正确性。
    但是,还有很多需要使用这些明文信息的场景。比如,我们经常会遇到存储用户信息的情况,比如:姓名、地址、电话号码、信用卡信息、第三方不支持 OAuth 的系统登录密码等等。
    首先,不建议在自己的系统内存储不必要的用户信息。尽量规避风险,使用可靠的第三方服务。只要存储了用户信息,就有可能成为攻击对象。
    但是假如业务逻辑无法避免这些信息的存储。本文是一个思路:使用 Mcrypt 算法进行信息的双向加密

    1. 可行性
      数据库是信息泄露的主要源头,需要避免在数据库存储明文敏感信息。而且,数据库基本是一个互联网公司的核心数据源,对于应用系统来说,数据库数据的内部人员访问权限非常难以限制。即,需要一种即使让其他人访问数据库但却不泄露用户敏感信息的策略。
    2. 思路
      虽然很多人喜欢 Bcrypt 超过了 Mcrypt,但是 Bcrypt 不支持双向加密,所以这里使用 Mcrypt 。
      首先,需要在一个安全的地方存储一个加密的秘钥。这个秘钥除了线上的应用程序,其他人是不可访问的。
      加密
      密文 = BASE64_ENCODE(加密算法(明文 + 随机 Salt, 秘钥))
      解密
      明文 = BASE64_DECODE(加密算法(密文,秘钥))- 随机 Salt
    3. 部署
      关于秘钥的存储是整个系统的关键,否则将功亏一篑。一般情况下可以将其存储在应用的配置文件中,仅仅会有泄露给运维人员的风险。
    4. 加密服务
      可以单独独立部署加密用的 HTTP 或者 RPC 服务,通过网络服务进行加密。这样做的好处是:可以进行访问记录的审计;方便进行访问权限控制;方便进行访问频率控制,防止大规模泄密;可以将加密服务和普通应用系统进行部署隔离;等等。
    5. 其他
      加密服务可以统一管理秘钥。将不同业务系统的秘钥进行隔离。另外可以进行秘钥的版本管理,以及秘钥的统一过期和更新。貌似绝大部分互联网公司都有客户敏感信息存储的需求,比如现在广泛使用的用户手机号码作为验证码的方式。希望这篇文章对你有帮助,减少安全风险。
    6. 其他几个安全问题的考虑
      之后有机会再写文章说明:如何安全的第三方存储敏感信息,比如 Github;Amazon S3 如何实现数据的签名访问。
      相关链接:
      https://en.wikipedia.org/wiki/Bcrypt
      https://en.wikipedia.org/wiki/Mcrypt
      http://www.twinbit.it/en/blog/storing-sensitive-data-git-repository-using-git-crypt
      https://gist.github.com/shadowhand/873637

    相关文章

      网友评论

          本文标题:互联网公司如何安全的存储用户信息

          本文链接:https://www.haomeiwen.com/subject/tauonttx.html