tft每日頭條

 > 生活

 > 身份驗證碼和設備驗證

身份驗證碼和設備驗證

生活 更新时间:2024-08-03 13:13:00
前言

你現在要建立一個系統。無論系統的功能如何,用戶身份驗證都是始終存在的一個功能。實現它看起來應該很簡單——隻需“拖動”一些現成的身份驗證模塊,或使用一些基本選項(例如 Spring Security)對其進行配置,就完成了。

身份驗證碼和設備驗證(用戶身份驗證真的很簡單嗎)1

是這樣嗎,不是的。上面說的是表面上的描述(就比如要實現一個搜索引擎就一個輸入框一個搜索按鈕就行了??),要做到正确的身份識别極其複雜。這不僅僅是登錄表單 -> 檢查用戶名/密碼 -> 設置 cookie,還有很多其他的問題需要考慮的:

  • Cookie 安全性

如何确保 cookie 不會洩漏或無法僞造。是否使用 cookie,或者使用 JWT 之類的無狀态方法,使用 SameSite 寬松還是嚴格要求?

  • 綁定IP

如果IP更改,将cookie綁定到IP并注銷用戶?

  • 密碼要求

最小長度、特殊字符?幫助選擇密碼的用戶界面?

  • 密碼存儲

在數據庫中存儲密碼——bcrypt、scrypt、PBKDF2、SHA 多次疊代?

  • 免密登錄

允許存儲在浏覽器中,一般為“是”,但有些應用在發送前故意對其進行哈希處理,使其無法自動存儲

  • 賬号樣式

電子郵件、用戶名與手機号——你需要用戶名嗎?是否允許更改電子郵件、手機号碼?

身份驗證碼和設備驗證(用戶身份驗證真的很簡單嗎)2

  • 限制登錄錯誤數次

限制身份驗證嘗試 – 應該阻止多少次登錄失敗的帳戶,管理員應該在多長時間内收到通知或至少記錄鎖定帳戶?每個 IP、每個帳戶的限制是這些的組合嗎?

  • 驗證碼

你需要驗證碼嗎,哪一種,允許多少次嘗試?刷新驗證碼是一種選擇嗎?

  • 密碼重置

密碼重置令牌數據庫表或與 HMAC 的過期鍊接?限制密碼重置?

  • SSO

您的服務是否應該支持 LDAP/ActiveDirectory 身份驗證(也許是),它是否應該支持 SAML 2.0 或 OpenID Connect,如果支持,哪些?還是全部?是否應該隻支持 SSO,而不是内部身份驗證嗎?

  • 2FA – TOTP

實施整個 2FA(雙因素認證) 流程,包括啟用/禁用,或備份代碼;在一段時間内不為特定設備請求 2FA來添加選項?根據某些組成員身份,配置 AD/LDAP 用戶子集進行身份驗證?

  • 強制配置 2FA

通過管理員配置強制 2FA – 在啟用全局選項後實現激活 2FA 的時間窗口?

  • 一次性登錄

通過鍊接登錄 – 是否支持通過電子郵件發送一次性登錄鍊接的選項?

  • XSS 保護

确保不存在 XSS 漏洞,特别是在登錄頁面上( XSS 可以竊取 cookie)

  • 身份驗證日志

專用身份驗證日志 - 保留所有登錄的曆史記錄,包括時間、IP、用戶代理

  • 強制注銷

是否需要注銷所需的已登錄設備的功能。

  • 允許移動設備保持登錄狀态

是否讓移動設備保持登錄狀态——客戶端應該存儲什麼?(當然不是密碼明文)

  • 保存用戶登錄地址

捕獲用戶的登錄時區并将其存儲在會話中以調整 UI 中的時間?

  • TLS 相互認證

如果我們需要支持使用私鑰的令牌認證,我們應該啟用 TLS 相互認證。證書庫中應該有什麼,Web 服務器是否支持每頁雙向 TLS 或者我們是否應該使用子域,如果有負載均衡器/反向代理,它是否支持以及如何轉發證書詳細信息?

  • 是否需要激活步驟

需要激活賬戶還是讓用戶在注冊後立即登錄?需要後台人員批準賬戶?

  • 初始密碼設置

管理員創建的帳戶的初始密碼設置 - 生成初始密碼并在首次登錄時強制更改?不是生成密碼并且從密碼重置流程開始?

  • 登錄異常檢測

如何檢測登錄異常,應該通過什麼方式通知用戶嗎?是否依賴第三方工具(例如 SIEM),還是内置此類功能?

身份驗證是每個應用程序基本的功能。但很多開發人員或PM都不重視它。IT 世界很複雜,沒有什麼是簡單的。發送電子郵件不簡單,身份驗證不簡單,日志記錄也不簡單。處理字符串和日期并不簡單,清理輸入和輸出也不簡單。

身份驗證碼和設備驗證(用戶身份驗證真的很簡單嗎)3

我們在構建框架和工具,來幫助我們完成所有這些事情方面做得不夠好。我們要積極對待這些問題,思考它們并做出最正确的方案。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved