文章:后端应该如何安全地储存用户数据?

总结:

一、用户信息之密码

讲密码的存储方案前,先要记住三条前提

  1. 用户喜欢到处使用一样的密码
  2. 用户喜欢使用简单好记的密码
  3. 世界上没有绝对的安全,但当攻击成本远高于收益时,整个系统达到相对安全

Phrase 1:哈希

哈希保存的思路很简单:用户注册时,把他的密码做一次MD5运算储存起来;用户登录时,把他输入的密码做一次MD5运算,再验证是否和数据库里储存的一致。

在MD5被证明不够安全以后,大家又开始选择其他的哈希算法如sha256等。但除了哈希算法本身的安全性外,这种做法的缺陷很快暴露,就是应付不了彩虹表的攻击方式。

彩虹表就是把简单的数字密码组合(和各种常见密码)的哈希先尽可能的计算出来,这些明文和哈希结果的对应关系就是一张彩虹表。由于前提2(大家喜欢使用简单好记的密码),所以试着计算出一个常用范围内的所有字母组合的哈希的彩虹表,可以破解绝大多数人的密码。当彩虹表足够大时,这种存储方式实际上与明文无异。

Phrase 2:加盐哈希

加盐哈希是目前业界最常见的做法。

加盐哈希的步骤如下:

  • 用户注册时,给他随机生成一段字符串,这段字符串就是(Salt)
  • 把用户注册输入的密码和盐拼接在一起,叫做加盐密码
  • 对加盐密码进行哈希,并把结果和盐都储存起来

在登陆时,先取出盐,再同样进行拼接、计算哈希,就能判断密码的合法性。

加盐哈希的做法,既保证了储存数据的不可逆,又防止了上一章的彩虹表攻击方式。这种方式下,黑客拿到数据库后,如果再要用遍历所有常用的密码组合的方式做彩虹表,那他需要对所有常用密码+盐值进行哈希运算。而每个用户的盐值都不相同,之前彩虹表的「一次运算无数次使用」变成了「一次运算一次使用」。这样的成本是难以接受的,由于前提3(攻击成本远高于收益,系统达到相对安全),所以这是一个比较安全的做法。

二、用户信息之手机号

对于手机号这种信息,只能用相对安全的做法,即先对手机号进行对称加密,再将加密结果储存在数据库里;使用时再用密钥解开。这时密钥不应该被保存在数据库里。如果数据库被拖库,那么些数据的安全性与明文无异。通常会将密钥以环境变量的形式放在服务器上。这时除非网站在被拖库的情况下同时被拿到服务器权限,否则手机号的明文就不会被泄露出去。

最后,谨防日志泄露用户信息:在后端项目生产环境里,总是会打印并收集各种各样的日志。日志可以方便统计数据、在出错的时候回溯、调试bug。但是我们不应该总是打印和收集全部请求的正文内容,因为请求里可能包含密码等敏感信息。当日志被泄露时,用户数据同样会以明文形式直接泄露出去。

【读书笔记】安全存储用户数据相关推荐

  1. 推荐系统实践读书笔记-04利用用户标签数据

    推荐系统实践读书笔记-04利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品. ...

  2. 推荐系统实践读书笔记-02利用用户行为数据

    推荐系统实践读书笔记-02利用用户行为数据 为了让推荐结果符合用户口味,我们需要深入了解用户.如何才能了解一个人呢?<论语·公冶长>中说"听其言,观其行",也就是说可以 ...

  3. 推荐系统实践读书笔记-06利用社交网络数据

    推荐系统实践读书笔记-06利用社交网络数据 自从搜索引擎谷歌诞生后,大家都在讨论互联网的下一个金矿是什么.现在,几乎所有的人都认为那就是社交网络.根据尼尔森2010年的报告,用户在互联网上22%的时间 ...

  4. 读书笔记-赢在用户[1]:什么是人物角色?为什么要创建人物角色?

    读书笔记-赢在用户[1]:什么是人物角色?为什么要创建人物角色? Posted in 读书笔记 on 一月 30th, 2010 by 00 – 1 Comment The_user_is_alway ...

  5. OCA读书笔记(8) - 管理用户安全

    创建用户: create user +用户 default tablespace + 表空间名 identified + 验证方式 SQL> create user easthome profi ...

  6. 5000字 大数据时代读书笔记_《大数据时代读书笔记》

    大数据时代读书笔记 本书在讲些什么? <大数据时代>的一大贡献在于大数据方兴未艾.众说纷纭的时刻,进一步 阐述和厘清了大数据的基本概念和特点,这对许多以为大数据就是"数据大&qu ...

  7. 推荐系统读书笔记(二)利用用户行为数据

    2.1 用户行为数据简介 显性反馈行为:用户明确表示对物品喜好的行为.评分.喜欢.不喜欢. 隐性反馈行为:不能明确反应用户喜好的行为.比如页面浏览.   显性反馈数据 隐性反馈数据 用户兴趣 明确 不 ...

  8. DDIA读书笔记 第五章 数据同步

    数据同步 多主 无主 主从关系 同步方式 同步同步 异步同步 半同步同步 同步滞后 read-after-write 一致性 单调读一致性 前缀一致读 实现 基于语句 基于WAL 基于行 拓扑结构 环 ...

  9. python基础学习[python编程从入门到实践读书笔记(连载四)]:数据可视化项目第15章

    文章目录 matplotlib初学 基础绘图用法 随机漫步 使用Plotly模拟掷骰子 matplotlib初学 基础绘图用法 import matplotlib.pyplot as pltsquar ...

最新文章

  1. 学Redis这篇就够了!
  2. Android中获取手机的IMEI
  3. OpenStack Nova Release(Rocky to Train)
  4. Spring 容器AOP的实现原理——动态代理
  5. 轻量级流程图控件GoJS示例连载(一):最小化
  6. Coursera课程Python for everyone:chapter8
  7. MATLAB描绘极坐标图像——polar
  8. 计算机的组成和Linux的发行版本介绍
  9. vue watch 修改滚动条_Vue 里的 computed 和 watch 的区别
  10. 调整地面材质_家用浴室柜台面什么材质好?Pvc和大理石选哪个合适?
  11. 简单工厂模式和策略模式结合使用php
  12. ExtJS6 Grid的日期编辑栏位处理
  13. c获取当前程序的路径_漏洞挖掘|使用AFL Fuzzing网络程序
  14. [译] What is some general advice for a new PhD student?
  15. python从云端服务器读数据_Python获取阿里云产品云监控数据指标
  16. 设计窗口模拟教室座位表java,基于web的考研自习教室座位管理(完整源码+论文全套+教学视频)...
  17. vue使用echarts图表渲染异常本地正常,线上时有时无的渲染
  18. 电脑网络没有问题,就是电脑连不上网的解决办法
  19. 关于VCT(voxel cone trace——基于体素的锥形光线追踪)Renderer的代码解读
  20. 服务器ip映射端口,一个公网IP对应多台服务器端口映射问题

热门文章

  1. 2002年图灵奖--利维斯、沙米尔和阿德勒曼简介
  2. 机房环境监控系统告警的概念!
  3. 第三章--第三节:列表
  4. setAttribute、getAttribute、removeAttribute
  5. 重学JavaScript系列——(六)集合引用类型
  6. 神华包神铁路Oracle goldengate备份容灾软件等技术服务招标
  7. 清华大学计算机专业在职博士吧,清华哪个系收在职博士
  8. (已解决)关于openwrt路由器重启后zerotier的ip变化处理
  9. 串口控制74HC164C语言,STM8 74hc164串口输出扩为并口输出子程序
  10. 计算机科学的发展趋势参考文献,计算机科学与技术发展趋势研究.doc