0

0

如何安全地存储用户凭据:前端与后端协同的身份验证实践

霞舞

霞舞

发布时间:2026-02-20 20:19:14

|

932人浏览过

|

来源于php中文网

原创

如何安全地存储用户凭据:前端与后端协同的身份验证实践

本文详解用户注册与登录过程中凭据的安全处理机制,强调密码绝不可在前端加密或本地存储,而应通过 https 传输至后端,由服务端使用 bcrypt 等单向哈希算法安全存储;前端仅负责安全保管短期有效的身份令牌(如 jwt 或会话 cookie)。

本文详解用户注册与登录过程中凭据的安全处理机制,强调密码绝不可在前端加密或本地存储,而应通过 https 传输至后端,由服务端使用 bcrypt 等单向哈希算法安全存储;前端仅负责安全保管短期有效的身份令牌(如 jwt 或会话 cookie)。

在 Web 开发初学阶段,一个常见误区是试图用 localStorage 或 sessionStorage 直接保存用户名和明文/加密后的密码。这是严重不安全的做法——这些 API 仅用于客户端临时状态管理,数据可被 JavaScript 任意读取,且不提供加密保护。一旦页面遭受 XSS 攻击,攻击者可瞬间窃取全部凭据。

✅ 正确架构遵循「职责分离」原则:

  • 前端(HTML/JS/CSS):仅负责收集输入、校验格式(如邮箱格式、密码长度)、通过 HTTPS 提交凭证,并安全持久化服务端颁发的身份令牌
  • 后端(如 Node.js、Python/Django、PHP 等):承担核心安全职责——接收凭证、验证、哈希密码、比对、签发令牌或设置 HttpOnly Cookie。

? 密码处理:永远在服务端哈希

密码必须使用加盐的单向哈希算法(如 bcrypt、Argon2 或 scrypt),而非可逆加密(如 AES)或弱哈希(如 MD5、SHA-1)。bcrypt 自动处理加盐与计算复杂度控制,推荐在 Node.js 中使用 bcryptjs

Heeyo
Heeyo

Heeyo:AI儿童启蒙陪伴师,风靡于硅谷的儿童AI导师和玩伴

下载
// 后端示例(Node.js + Express)
const bcrypt = require('bcryptjs');

// 注册时:哈希密码并存入数据库
app.post('/api/register', async (req, res) => {
  const { username, password } = req.body;
  const saltRounds = 12;
  const hashedPassword = await bcrypt.hash(password, saltRounds);
  // ✅ 安全:仅存储 hashedPassword,永不存储原始密码
  await db.users.insert({ username, password: hashedPassword });
  res.status(201).json({ message: 'User created' });
});

// 登录时:比对哈希值
app.post('/api/login', async (req, res) => {
  const { username, password } = req.body;
  const user = await db.users.findOne({ username });
  if (user && await bcrypt.compare(password, user.password)) {
    // ✅ 验证通过:生成 JWT 或设置会话
    const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '24h' });
    res.json({ token }); // 前端将 token 存入 localStorage(仅限可信场景)或内存
  } else {
    res.status(401).json({ error: 'Invalid credentials' });
  }
});

? 前端令牌管理最佳实践

  • 推荐方式:登录成功后,将 JWT 存入 localStorage(需配合 CSRF 防护)或更安全的 httpOnly + Secure Cookie(需后端设置);
  • ⚠️ 避免:将密码、密钥、API Secret 等敏感信息存入 localStorage;
  • 增强防护:前端每次请求携带 Authorization: Bearer ;登出时主动清除 token;
  • ?️ 补充建议:启用 HTTPS 强制传输、CSP 头防止 XSS、敏感操作二次验证(如短信/邮箱确认)。

❗关键注意事项总结

  • 绝不前端哈希密码:攻击者可绕过 JS 直接提交哈希值,等同于“哈希即密码”;
  • 绝不明文传输密码:确保表单提交走 HTTPS,禁用 HTTP 表单;
  • localStorage ≠ 安全保险箱:它仅解决“页面刷新不丢失状态”,不解决安全性;
  • 会话有效期要合理:JWT 设置短过期时间(如 2h),配合 Refresh Token 机制延长体验;
  • 数据库字段命名需匿名化:避免使用 password_hash 等明显标识,降低信息泄露风险。

安全的身份验证不是一蹴而就的功能模块,而是贯穿前后端的设计哲学。从今天起,请牢记:密码的生命周期止步于后端哈希函数的输出,前端唯一该信任的,是服务端亲手签发的、有时效的访问令牌。

立即学习前端免费学习笔记(深入)”;

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

100

2026.02.04

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6472

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

362

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

434

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6403

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

836

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1086

2023.12.21

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

796

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 11.7万人学习

CSS3 教程
CSS3 教程

共18课时 | 5.9万人学习

Vue 教程
Vue 教程

共42课时 | 8.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号