如果這個 ERP 系統會儲存管理員與員工帳號,密碼就不應該以 admin123、employee2024 這類預設值直接保存,更不能放進前端 JavaScript 或 localStorage。密碼該用什麼方式加密?嚴格來說,登入密碼不是「加密」後保存,而是使用雜湊函式處理,讓系統只保留驗證所需的結果,即使資料庫外洩,也不會直接暴露原始密碼。
建議使用 Argon2id 或 bcrypt
目前較合適的選擇是 Argon2id,其設計目的就是提高密碼破解成本,並能調整記憶體、運算時間與平行執行參數。如果使用的主機環境或套件不支援 Argon2id,bcrypt 仍是可靠的替代方案;PHP、Node.js、Python 等常見後端框架通常都有現成函式庫,不必自行設計雜湊演算法。
每組密碼都應加入獨立的 salt。salt 不需要保密,但必須隨機且不可重複。以同一個 salt 或單純使用 SHA-256 儲存密碼,看起來像有加密,實際上仍容易遭受彩虹表與字典攻擊。密碼安全這件事,真的不適合「自己加一點字串」來處理。
預設密碼與 localStorage 的風險
系統首次安裝時可以提供初始密碼,但登入後應強制使用者立即修改,並要求一定長度,例如至少 12 個字元。更理想的做法是建立一次性啟用連結,而不是公開固定密碼。管理員帳號也應啟用雙因素驗證、登入失敗次數限制,以及異常登入記錄。
另外,localStorage 適合保存部分介面設定,例如主題顏色或瀏覽器偏好,卻不適合存放密碼、session token 或完整 ERP 資料。任何能被前端讀取的內容,都可能受到 XSS 攻擊影響。登入狀態可考慮使用設定為 HttpOnly、Secure、SameSite 的 Cookie,並讓重要資料保存在具備權限控管的伺服器端。
一個實際的安全流程
使用者登入時,後端以 Argon2id 或 bcrypt 驗證輸入密碼;驗證成功後,再建立短效期工作階段。備份資料庫時也要加密,並避免把密碼雜湊、API 金鑰與備份檔一起公開下載。若目前程式仍使用預設密碼,建議先強制全員重設,再檢查前端原始碼、JSON 匯出檔與瀏覽器儲存空間,看看是否已經留下敏感資訊。

評論(5)
哎呀,我之前的系統還在用 SHA‑256,看到這篇才知道要換成 Argon2id 了!
如果伺服器記憶體有限,bcrypt 真的能當備案嗎?
我們公司剛實施雙因素驗證,配合強密碼政策,安全感提升不少。
不太懂 salt 為什麼不需要保密,能再說明一下嗎?
有人用過 Argon2id 的 Node 套件嗎?設定上有什麼坑要注意?