前端注册时怎么处理密码盐值才安全?
我最近在做用户注册功能,看到后端同事说密码要加盐哈希,但我搞不清盐值到底该谁生成、怎么传。我在前端直接生成随机盐拼到密码里再发过去,这样行不行?会不会有安全隐患?
比如我现在是这么做的:
<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>
但感觉这样好像不太对,盐值暴露在前端会不会被撞库?求指点正确做法。
然后在后端用安全的方式生成盐值,比如使用
bcrypt这类库来处理加盐和哈希,别在前端瞎折腾了,省得给自己找麻烦。