ToB企服应用市场:ToB评测及商务社交产业平台

标题: 体系网站登录,如何合规传输用户登录暗码? [打印本页]

作者: 温锦文欧普厨电及净水器总代理    时间: 2024-12-17 22:04
标题: 体系网站登录,如何合规传输用户登录暗码?
对于体系登录页面来说,我们作为开发职员,应该没有生疏的吧。就像下面如许子。

 
 
点击登录,调用/login 接口。来看下面截图中的 载荷(payload)数据,其中,暗码 password 的值是明文。 

 
这里要说的是,用户登录暗码属于用户隐私数据。
起首,隐私数据属于敏感数据,不能明文传输;
其次,体系server端不能直接触碰用户暗码。也就是说,server端步伐不能知道用户真实的登录暗码。如果用户暗码是123,这个暗码只能用户本人知道,体系无权知道。一旦体系知道,就会有暗码泄露的风险。安全性低的步伐,甚至会直接把用户暗码打印到log文件里。
 
因此,如何计划我们的登录步伐,以满足上面两点要求呢?
 
直接公布答案。————前后端交互所传输的password,转换成不可逆的md5值。即:所传输的password = md5(用户输入的明文)。
云云这般,欣赏器F12看到的将是下面如许子。

对于体系的server步伐来说,起首,在初始设定用户暗码阶段,数据库持久化存储用户暗码时,要明确暗码的加密算法,例如:实际存储的用户password = md5(md5(用户明文暗码), salt)。
接下来我们说登录接口。服务端收到的暗码参数,是一个md5串,从而做到了隐私数据的掩护。下面是部分表示代码。
  1. @RequestMapping("/login")
  2. public Result login(HttpServletRequest request){
  3.     ...
  4.     String loginAcc = readFromRequest(request, "login_account");
  5.     String passwordMd5 = readFromRequest(request, "password"); // 前端传过来的 md5 串
  6.     LoginAccount loginAccount = loginAccountRepository.findByLoginName(loginAcc);
  7.     if (loginAccount == null) {
  8.         return Result.error("用户不存在");
  9.     }
  10.     String password = PasswordUtil.encrypt(passwordMd5, loginAccount.getSalt());
  11.     if (!loginAccount.getPassword().contentEquals(password)) {
  12.         return Result.error("登录口令错误");
  13.     }
  14.     ...
  15. }
复制代码
 
是不是很优雅?
 
不,还可以更优雅。
 
上面的安全控制,还可以更安全。
使用上面的方案,会存在如许一个环境:用户在不修改暗码的环境下,每次体系登录调用login接口时,传输的暗码是相同的md5串。这多少让我们开发者有些不爽!
为此,我们继续琢磨这个登录安全增强。
我们借助可逆的加密算法改造一下,将md5的暗码作为加密数据的一部分举行传输。

详细来讲,前后端约定一套加密算法,作为所传输的password参数的值。如 所传输的password = base64(des(passwordMd5, timestamp)),其中的 timestamp是当前时间戳,这也有效包管了每次请求所传输的password参数值各不相同。后端login接口里,按照相同的加密算法来解密得到所需的passwordMd5。
你也许会疑惑于用户欣赏器与服务器两头的时间不同等。没关系,这个我在姊妹篇中有应对方案了,戳网站登录,如何制止明文传输用户登录暗码?
 
【EOF】欢迎关注我的微信公众号「靠谱的步伐员」,让我们一起做靠谱的步伐员。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4