我设计的一个安全的 web 系统用户密码管理流程

作为一名有多年经验的前端,在刚开始学习web后端的时候,就对如何设计一个安全的 web 系统用户密码管理流程有很多疑问。之前自己也实践过几种方法,但一直觉得不是十分安全。

我们知道,用户在注册或登录界面填写的密码是明文的,我们需要将密码安全的传输到后端,保存到数据库,或者完成登录校验。

我一开始担心的是在网络传输中造成密码的泄露,所以确定了以下方案,1. 使用 https; 2. 使用 rsa 公钥加密。具体流程如下:

注册流程:前端获取公钥 -> 前端用公钥加密明文密码 -> https 传输给后端 -> 后端私钥解密(确保密文是可以解密的) -> 存入密文至数据库
登录流程:前端获取公钥 -> 前端用公钥加密明文密码 -> https 传输给后端 -> 后端私钥解密,读取数据库密文并解密 -> 对比密码是否一致

在这样设计了以后,很快被后端同学打脸。你在私钥被窃且拖库的情况下,所有用户的明文密码都会被解密出来。

很快,我经过思考后,调整了流程

注册流程:前端获取公钥 -> 前端用公钥加密明文密码 -> https 传输给后端 -> 后端私钥解密得到明文密码 -> 生成随机盐 -> 明文密码+盐并计算 hash 值 -> 存入 hash 值至数据库
登录流程:前端获取公钥 -> 前端用公钥加密明文密码 -> https 传输给后端 -> 后端私钥解密得到明文密码 -> 读取数据库用户信息得到该用户盐值 -> 明文密码+盐并计算 hash 值 -> 对比计算出来的 hash 值和数据库中的 hash 值是否一致

经过这样的设计以后,数据库中就没有任何用户明文密码了。即便私钥被窃且被拖库,所有用户的明文密码都不会泄露。

我自己开发的某个系统,用这样的设计跑了很久,也没有遇到什么问题。但是最近我再思考这个问题的时候发现,这样还是不安全。

假设,服务器的 root 权限被攻破,黑客可以通过修改程序,直接打印私钥解密明文密码的结果,这样,用户的明文密码还是会被泄露。

怎么办?我再想了很久,发现,只要增加一个流程,即可避免这个问题。

注册流程:前端获取公钥 -> 前端将明文密码取 hash 值 -> 前端用公钥加密 hash 值 -> https 传输给后端 -> 后端私钥解密得到前端传的 hash 值 -> 生成随机盐 -> hash 值+盐并计算二次 hash 值 -> 存入 二次hash 值至数据库
登录流程:前端获取公钥 -> 前端将明文密码取 hash 值 -> 前端用公钥加密 hash 值 -> https 传输给后端 -> 后端私钥解密得到前端传的 hash 值 -> 读取数据库用户信息得到该用户盐值 -> hash 值 +盐并计算 hash 值 -> 对比计算出来的 hash 值和数据库中的 hash 值是否一致

通过这样的设计,明文密码只存在用户前端填写的表单上,在传输过程中,以及程序运行和数据存储中,都是没有明文密码的。也就是说,即便私钥被窃,数据库被拖库,服务器 root 权限被攻陷,整个系统崩溃,用户的明文密码依然被保护二不会泄露。

我将我的设计扔给 deepseek,它表示这样的设计已经是非常高等级的安全了。同时,它表示,如果要实现金融级别的安全,还需要做如下完善:

  1. 给每个请求分配一个随机盐值,让前端用明文密码加随机盐值计算 hash ,确保每次用户传输的数据中的 hash 值是不一样的,防止被彩红攻击。
  2. 对接口请求进行频次限制,防治被暴力破解。

我觉得除非是真的开发金融及的应用,否则上面两点增加的复杂度不值得一般的小的系统。所以,我就不打算在我开发的这个小的工具系统里采用这样高等级的措施了。

那么各位看官,您觉得还有没有更好的实现方式呢?

一位多年后端开发经验的老哥给我讲,你想得太TM复杂了,绝大多数系统都是 https + 明文密码传输的,后端弄个盐在数据库存个 hash 就算很注重安全了……我听后大为震惊……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

炼丹学习笔记3---ubuntu2004部署运行openpcdet记录

前言 环境 cuda 11.3 python 3.8 ubuntu2004 一、cuda环境检测 ylhy:~/code_ws/OpenPCDet/tools$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Sun_Mar_21_19:15:46_PDT_2021 Cuda compilation tools, release 11.3…

在 Linux 系统中过滤文件中的字符串

在 Linux 系统中过滤文件中的字符串,可以使用多种命令行工具实现。以下是几种常见方法及详细说明: 一、使用 grep 命令(最常用) grep 是 Linux 中最强大的文本搜索工具,支持正则表达式。 基础语法: grep…

基于PXIE 总线架构的Kintex UltraScale 系列FPGA 高性能数据预处理板卡

基于PXIE 总线架构的Kintex UltraScale 系列FPGA 高性能数据预处理板卡 一款基于3U PXIE 总线架构的高性能数据预处理FMC 载板,板卡具有1 个FMC(HPC)接口,1 个X8 GTH 背板互联接口,可以实现1 路PCIe x8。板卡采用Xili…

Java 使用 PDFBox 提取 PDF 文本并统计关键词出现次数(附Demo)

目录 前言1. 基本知识2. 在线URL2.1 英文2.2 混合 3. 实战 前言 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD…

Vue百日学习计划Day16-18天详细计划-Gemini版

重要提示: 番茄时钟: 每个番茄钟为25分钟学习,之后休息5分钟。每完成4个番茄钟,进行一次15-30分钟的长休息。动手实践: DOM 操作和事件处理的理解高度依赖于实际编码。请务必在浏览器中创建 HTML 页面,并配…

SearchClassUtil

路径扫描工具SearchClassUtil,用于扫描指定包(XXXX)下的所有.class文件,并将它们的全限定类名(如tomcat.SearchClassUtil)收集到列表中返回。该工具使用递归文件遍历和反射机制,是实现 Spring 框…

云服务器的运用自如

云服务器的运用自如:从基础到高阶的实战指南(2025版) 云服务器作为数字化转型的核心工具,其灵活性和高效性已覆盖从个人开发者到企业级应用的广泛场景。以下是基于当前技术趋势的云服务器深度运用策略,涵盖核心应用、…

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs-docker MCP解析

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs-docker MCP解析 这里面有很重要的原因其中一个很其中一个原因是因为如果你使用docker的方式,你可以在虚拟环境下就类似于这个沙箱的这个机制可以进行隔离。这对于安全,…

快慢指针算法(Floyd 判圈算法)

快慢指针(又称龟兔赛跑算法)是一种常用的链表操作技巧,通过两个移动速度不同的指针遍历链表,用于解决链表中环检测、中点查找等问题。以下是其核心应用场景和实现方法: 1. 链表环检测 问题描述: 判断链表中…

独立开发者利用AI工具快速制作产品MVP

在当今快速发展的科技时代,独立开发者面临着前所未有的机遇与挑战。曾经需要花费数天甚至数周才能完成的产品MVP(Minimum Viable Product,最小可行性产品),如今借助强大的AI工具,可以在短短1小时内实现。 …

Spark处理过程-转换算子和行动算子

(一)RDD的处理过程 RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使 用,直到最后一个RDD经过“行动”操作才会真正被计算处理。 1.延迟。RDD中所有的转换都是延迟的&…

设置环境变量启动jar报

1. 环境变量设置 set PATHC:\Program Files\java17\jdk-17.0.9\bin;%PATH%2. 启动jar java -jar jar包名3. 记录原因 PATH路径前添加java执行文件路径才会管用。添加后可以试试以下命令 直接输入PATH 回车 PATH进行java版本测试 java -version

589. N叉树的前序遍历迭代法:null指针与栈的巧妙配合

一、题目描述 给定一个N叉树的根节点,返回其节点值的前序遍历结果。前序遍历的定义是:先访问根节点,再依次遍历每个子节点(从左到右)。例如,对于如下N叉树: 1/ | \3 2 4 / \ 5 6前序遍历结果…

显性知识的主要特征

有4个主要特征: 客观存在性静态存在性可共享性认知元能性

奥运数据可视化:探索数据讲述奥运故事

在数据可视化的世界里,体育数据因其丰富的历史和文化意义,常常成为最有吸引力的主题之一。今天我要分享一个令人着迷的奥运数据可视化项目,它巧妙地利用交互式图表和动态动画,展现了自1896年至今奥运会的发展历程和各国奥运成就的…

Mysql存储过程(附案例)

​ 文章目录 存储过程概述1、基本语法2、变量①、系统变量②、用户自定义变量③、局部变量 3、流程控制语句①、if语句②、参数③、case语句④、while语句⑤、repeat语句⑥、loop语句⑦、cursor游标⑧、handler 4、存储函数 存储过程概述 存储过程是事先经过编译并存储在数据…

小波变换+注意力机制成为nature收割机

小波变换作为一种新兴的信号分析工具,能够高效地提取信号的局部特征,为复杂数据的处理提供了有力支持。然而,它在捕捉数据中最为关键的部分时仍存在局限性。为了弥补这一不足,我们引入了注意力机制,借助其能够强化关注…

SQLMesh 增量模型从入门到精通:5步实现高效数据处理

本文深入解析 SQLMesh 中的增量时间范围模型,介绍其核心原理、配置方法及高级特性。通过实际案例说明如何利用该模型提升数据加载效率,降低计算资源消耗,并提供配置示例与最佳实践建议,帮助读者在实际项目中有效应用这一强大功能。…

Android应用内存分析与优化 - 工具篇之Booster

序 在原理篇中,我们发现在App内存的分布中,Code是占大头的部分,所以我们可以从App体积方面想办法,通过减小App体积达到降低内存的目的,同时,根据权威的机构分析,体积与用户下载和留存有很大的联…

金属加工液展|切削液展|2025上海金属加工液展览会

2025上海金属加工液展览会 时间:2025年12月2-4日 地点:上海新国际博览中心 2025上海金属加工液展规划30000平方米展览规模,预设展位1200个,将为国内外加工液产业提供一个集“展示、合作、交易、发展”于一体的综合性平台&#…