NodeClub代码的一个安全风险!
发布于 1年前 作者 jimliu 553 次浏览

我看了一下NodeClub的源码,关于登录认证这部分我觉得是很有风险的。NodeClub作为一个开源程序,估计会有人图省事不会去修改session_secret

先看看生成认证Session代码:

function gen_session(user, res) {
  var auth_token = encrypt(user._id + '\t' + user.name + '\t' + user.pass + '\t' + user.email, config.session_secret);
  res.cookie(config.auth_cookie_name, auth_token, {path: '/', maxAge: 1000 * 60 * 60 * 24 * 30}); //cookie 有效期30天
}

这个代码有几个问题:

  • 只要用户没修改密码和session secret,每次加密后结果其实是一样的,也就是用户每次登录后Cookie的值都是一样的,它是不会过期的,如果泄漏,那么就会被伪造,用户除了修改密码毫无办法。
  • 加密使用的对称加密,如果session_secret泄密,那么Cookie的值会被解密。如果只是解密倒还是小事,关键会把用户的密码user.pass也看到,这很要命!虽然pass是md5之后的,但是md5并没有加上salt,所以有可能是会暴露一些信息的,因为只要密码一样,那么md5后的结果必然一样的。
  • 如果session_secret泄密,那么可以加密结果直接伪造身份

建议:

  • 登录后的Cookie加密时增加时间戳,保证每次登录后Cookie是不一样的,并且校验时根据时间戳判断过期
  • user.pass不要放在加密内容里面
  • 提醒用户session_secret不修改导致的严重后果(最好是能安装时随机生成一个)
1 回复

…这个咱们程序员不会连这个常识都没吧…

回到顶部