Skip to content

Latest commit

 

History

History
81 lines (58 loc) · 3.9 KB

密码安全以及安全防御手段.md

File metadata and controls

81 lines (58 loc) · 3.9 KB

账号密码安全相关

密码泄露的渠道

  • 数据库被盗
  • 服务器被入侵
  • 通讯被窃听
  • 内部人员盗取数据

具体防御手段

  • 严禁明文存储
  • 单向变换
  • 变换复杂度要求
  • 密码复杂度要求
  • 加盐提高密码复杂度
  • https传输
  • 频次限制
  • 前端加密

md5&salt

一些情况的讨论
  • 两次或多次md5无法使加密更加可靠

  • 不能只在数据库加盐,需要在后端代码里在定义常量盐,提高安全性,即使在数据库泄露之后,密码依旧无法反推

  • 不能完全依靠加盐来保护密码,对于用户密码的输入也应该有复杂度要求

具体加盐方式
// 如果数据库里没有设定盐

// sql 表示数据库语句

// 去过没有盐 则生成一个盐,先用盐字段对密码加密, 再加到数据库的salt字段中
if (res.salt === null) {
  const salt = Math.random() * 99999 + new Date().getTime()
  
  res = await query(sql, [salt, encryptPassword(salt, password), username])
} else {
  console.log('has salt')
  // 有盐的情况直接进行操作
}

人机验证&验证码

主要防止机器人之类恶意注册或者其他恶意请求

图片验证码

后端生成一个验证码图片,并把相应字符存在session中,并将图片发送给前端,在用户发送过来的时候对比验证码

滑动验证码

和图片验证码类似,生成一张图片并随即抠图,记录下x,y的值,设定一些误差范围,将图片返回给前端。前端实现交互,当用户拖动结束时候,前端将x,y发送给后台,后台对比值是否正确

使用https

https & http 比http更加安全,http可能被黑客拦截,proxy到其他地址来误导用户, https = http + ssl证书 通过证书可以明确网站信息,增强网站可靠性

  • 什么是ssl证书 SSL证书由浏览器中“受信任的根证书颁发机构”在验证服务器身份后颁发,具有网站身份验证和加密传输双重功能

  • https涉及到的密码学知识

    • 对称加密 对称加密相当于加密和解密用同一把秘钥,发送人用秘钥加密,把密文发送给接收人,接收人用秘钥解密密文。这么做有一个极大的缺点就是,所有人共用一个秘钥,一旦任意一个人泄露了秘钥,就要重新更换秘钥,秘钥的传输,以及文件的安全都得不到保障,尤其在分布式开发的过程中,密钥的管理也是很大的问题。
    • 非对称加密 非对称加密有一把公钥和一把密钥,发送人使用公钥加密发送密文,接收人用密钥解密密文。这样只要由个别人管理好密钥,即使公钥发生泄漏或者有其他问题,也不会导致文件有安全问题,在分布式开发中,也更好管理。并且非对称加密有极强的抗抵赖性和真实性,即能使用密钥解密的密文,一定是用公钥加密的,反之亦然。
  • https安全原理

    • 服务器先把自己的网站相关信息以及公钥发送给相关部门,如赛门铁克(Symantec)等,他们验证以后会发给服务端一个证书,并保存公钥
    • 客户端和服务器端经tcp三次握手,建立初步连接。
    • 客户端发送http报文请求并协商使用哪种加密算法。
    • 服务端响应报文并把自身的数字签名发给服务端。
    • 客户端请求的时候,服务器把公钥和证书发给客户端。客户端拿到公钥和证书去和颁发中心去匹配认证,在认证成功之后,客户端生成一个对称秘钥,用服务器给的公钥加密自己的秘钥,并发送给服务器
    • 服务器拿到密文之后,用秘钥解密,拿到客户端的秘钥,之后和客户端正常通信的时候就是用对称秘钥进行通信。
    • TCP四次挥手,通信结束。

helmet中间件 防止攻击 集成了之前的一些攻击方式

https://www.npmjs.com/package/koa-helmet