我設計的一個安全的 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.pswp.cn/bicheng/81311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81311.shtml
英文地址,請注明出處:http://en.pswp.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個,將為國內外加工液產業提供一個集“展示、合作、交易、發展”于一體的綜合性平臺&#…