前端注册时怎么处理密码盐值才安全?

子聪 阅读 4

我最近在做用户注册功能,看到后端同事说密码要加盐哈希,但我搞不清盐值到底该谁生成、怎么传。我在前端直接生成随机盐拼到密码里再发过去,这样行不行?会不会有安全隐患?

比如我现在是这么做的:

<form id="registerForm">
  <input type="password" id="password" />
  <button type="submit">注册</button>
</form>

<script>
  document.getElementById('registerForm').addEventListener('submit', (e) => {
    e.preventDefault();
    const salt = crypto.randomUUID().substring(0, 16);
    const hashed = btoa(salt + document.getElementById('password').value); // 临时用base64模拟
    fetch('/api/register', { method: 'POST', body: JSON.stringify({ pwd: hashed, salt }) });
  });
</script>

但感觉这样好像不太对,盐值暴露在前端会不会被撞库?求指点正确做法。

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
❤秀丽
❤秀丽 Lv1
问题在于前端生成盐值并传输是不安全的,盐值应该在后端生成。把密码传到后端,让后端负责加盐和哈希处理。

document.getElementById('registerForm').addEventListener('submit', (e) => {
e.preventDefault();
const pwd = document.getElementById('password').value;
fetch('/api/register', { method: 'POST', body: JSON.stringify({ pwd })});
});


然后在后端用安全的方式生成盐值,比如使用 bcrypt 这类库来处理加盐和哈希,别在前端瞎折腾了,省得给自己找麻烦。
点赞
2026-03-30 11:00