從“用戶登錄”看WebFuture有多專業(yè),最常見(jiàn)的功能并不簡(jiǎn)單!
用戶注冊(cè)/登錄功能(含找回密碼)是所有系統(tǒng)中都會(huì)有的一個(gè)功能模塊,但這個(gè)功能絕對(duì)不簡(jiǎn)單!甚至可以說(shuō)是非常復(fù)雜!我們來(lái)看看這個(gè)功能需要考慮哪些東西就知道了:
一、基礎(chǔ)功能需求
● 應(yīng)支持最常見(jiàn)的賬號(hào)密碼登錄方式(含用戶名+密碼、身份證號(hào)碼+密碼、郵箱+密碼、手機(jī)號(hào)碼+密碼,應(yīng)自動(dòng)識(shí)別不同的登錄方式);
● 應(yīng)支持手機(jī)免密登錄(含自動(dòng)注冊(cè)賬號(hào));
● 應(yīng)支持微信掃碼登錄、微信授權(quán)登錄(兩者是不同的);
● 應(yīng)支持企業(yè)微信掃碼登錄、企業(yè)微信授權(quán)登錄(兩者是不同的);
● 應(yīng)支持釘釘掃碼登錄、釘釘授權(quán)登錄(兩者是不同的);
● 以上所有登錄方式應(yīng)都是可以配置是否啟用,以及默認(rèn)登錄方式;
● 用戶注冊(cè)時(shí)的字段(電子郵件、手機(jī)號(hào)碼、身份證號(hào)碼、出生日期)可以配置是否啟用和是否必填;
● 應(yīng)支持開(kāi)啟/關(guān)閉用戶注冊(cè)、登錄功能;
● 登錄時(shí)應(yīng)可更改保持登錄狀態(tài)的期限(關(guān)閉瀏覽器前/24小時(shí)內(nèi)/7天內(nèi)/1個(gè)月內(nèi)/始終),應(yīng)支持配置默認(rèn)保持登錄狀態(tài)的期限;
二、安全性方面的要求
● 注冊(cè)/登錄/找回密碼的代碼邏輯中應(yīng)沒(méi)有SQL注入攻擊漏洞、XSS漏洞、CSRF漏洞等常見(jiàn)安全漏洞;
● 應(yīng)支持防重復(fù)提交機(jī)制。表單提交按鈕應(yīng)具有防止反復(fù)提交的功能,確保數(shù)據(jù)不會(huì)被重復(fù)記錄,在提交時(shí)會(huì)禁用提交按鈕并輔以動(dòng)態(tài)效果提示用戶已觸發(fā)提交事件;在服務(wù)器端則會(huì)進(jìn)行重復(fù)提交的驗(yàn)證和攔截,以防止因?yàn)橛脩粽`操作、網(wǎng)絡(luò)傳輸問(wèn)題、黑客攻擊等原因而出現(xiàn)的表單重復(fù)提交。
● 強(qiáng)制使用強(qiáng)密碼,強(qiáng)密碼規(guī)則包含:密碼不能為空;密碼長(zhǎng)度不能少于6位;密碼不能包含空格;密碼必須包含一個(gè)字符,這個(gè)字符既不是數(shù)字也不是字母;密碼必須包含數(shù)字;密碼必須包含小寫字母;密碼必須包含大寫字母。不允許使用常見(jiàn)密碼(有些強(qiáng)密碼也仍是常見(jiàn)密碼,比如:123!@#、123!QAZ、admin*888等);密碼的字符數(shù)量<用戶名的字符數(shù)量+3時(shí),密碼不能包含用戶名;密碼不能是“用戶名”+“111、222、333、444、555、666、777、888、999、000、123、456、789、!@#、!QA、@WS、1qa、2ws”的任意組合;密碼禁止設(shè)置為用戶名+4位年份數(shù)字;密碼不能是“用戶名”+“!@#$%^&*”中的任意一個(gè)字符+4位及以內(nèi)的數(shù)字。
● 密碼應(yīng)優(yōu)先使用SM3國(guó)密算法進(jìn)行加密后保存在數(shù)據(jù)庫(kù)中,不得保存明文密碼。密碼的密文不得是直接對(duì)密碼原文進(jìn)行加密,而應(yīng)該是加鹽加密,鹽值應(yīng)是在安裝系統(tǒng)時(shí)自動(dòng)生成的隨機(jī)字符串,以保證相同的密碼在每個(gè)網(wǎng)站中的加密結(jié)果也不一樣。
● 應(yīng)提供管理員賬號(hào)安全檢查功能,對(duì)于設(shè)置為弱口令和常用密碼的賬號(hào)自動(dòng)修改為強(qiáng)密碼并鎖定賬號(hào)。
● 應(yīng)支持在提交注冊(cè)/登錄表單前對(duì)表單數(shù)據(jù)采用RSA1024等非對(duì)稱加密算法進(jìn)行加密,以防用戶名、密碼等關(guān)鍵信息在傳輸過(guò)程中被竊聽(tīng),即使沒(méi)有部署SSL證書也可以做到;
● 應(yīng)支持暴力猜解防護(hù),要有相應(yīng)的安全策略且可配置,比如平時(shí)不開(kāi)啟驗(yàn)證碼以方便用戶登錄,但3次登錄失敗后就要開(kāi)啟驗(yàn)證碼,10次登錄失敗后就要鎖定賬戶、50次登錄失敗后凍結(jié)終端和IP等,凍結(jié)時(shí)間可以配置;
● 應(yīng)支持鎖定/解鎖用戶/管理員時(shí),自動(dòng)重置密碼為超過(guò)20個(gè)字符以上的強(qiáng)密碼,以防攻擊者利用SQL注入漏洞(萬(wàn)一有)將這些鎖定狀態(tài)的用戶改為正常狀態(tài)后登錄這些賬戶;
● 應(yīng)支持雙因子驗(yàn)證,雙因子驗(yàn)證是指使用賬戶+密碼登錄時(shí),還需要驗(yàn)證郵件/手機(jī)短信驗(yàn)證碼或UKey驗(yàn)證(可配置),同時(shí)驗(yàn)證通過(guò)后才能登錄;
● 應(yīng)支持管理員在非常見(jiàn)地登錄時(shí)二次驗(yàn)證;
● 應(yīng)支持管理員使用非常見(jiàn)設(shè)備登錄時(shí)二次驗(yàn)證;
● 應(yīng)支持對(duì)利用“找回密碼”功能進(jìn)行暴力猜解的防護(hù);
● 應(yīng)支持對(duì)惡意消耗手機(jī)短信數(shù)量的防護(hù);
● 應(yīng)支持定時(shí)自動(dòng)重置長(zhǎng)時(shí)間未登錄用戶的密碼;
● 應(yīng)支持定時(shí)自動(dòng)鎖定長(zhǎng)時(shí)間未登錄的管理員;
● 應(yīng)支持強(qiáng)制管理員定期修改密碼;
● 應(yīng)支持攻擊者利用社會(huì)工程學(xué)原理來(lái)攻擊,禁止注冊(cè)黑名單中的用戶名和昵稱;
● 應(yīng)支持手機(jī)號(hào)碼和郵箱真實(shí)性驗(yàn)證;
● 應(yīng)支持密碼、余額等用戶關(guān)鍵信息完整性的驗(yàn)證,即要使用專門的字段來(lái)將用戶相關(guān)信息進(jìn)行加鹽加密后保存在某個(gè)字段中,登錄等操作時(shí)進(jìn)行驗(yàn)證,以防止攻擊者惡意篡改相關(guān)數(shù)據(jù);
● 應(yīng)對(duì)客戶端是否支持Cookie進(jìn)行驗(yàn)證,如果不支持則不允許登錄,以防惡意繞過(guò)基于Session的一些安全驗(yàn)證手段;
● 應(yīng)支持三員分立。三員分立是指系統(tǒng)管理員、審計(jì)管理員、安全管理員分別擁有不同的權(quán)限。系統(tǒng)管理員主要負(fù)責(zé)系統(tǒng)的資源和運(yùn)行進(jìn)行配置、控制和管理,包括用戶身份、系統(tǒng)資源配置、系統(tǒng)加載和啟動(dòng)、系統(tǒng)運(yùn)行的異常處理、數(shù)據(jù)和設(shè)備的備份與恢復(fù)等。審計(jì)管理員主要負(fù)責(zé)對(duì)審計(jì)記錄進(jìn)行分析,并根據(jù)分析結(jié)果進(jìn)行處理,包括根據(jù)安全審計(jì)策略對(duì)審計(jì)記錄進(jìn)行存儲(chǔ)、管理和查詢等。安全管理員主要對(duì)系統(tǒng)中的安全策略進(jìn)行配置,包括安全參數(shù)的設(shè)置,主體、客體進(jìn)行統(tǒng)一安全標(biāo)記,對(duì)主體進(jìn)行授權(quán),配置可信驗(yàn)證策略等。
● 系統(tǒng)應(yīng)默認(rèn)屏蔽在錯(cuò)誤響應(yīng)中泄露敏感信息,包括:系統(tǒng)的詳細(xì)信息、會(huì)話標(biāo)識(shí)符或者賬號(hào)信息。默認(rèn)情況下當(dāng)頁(yè)面出現(xiàn)異常時(shí)IIS和ASP.NET會(huì)呈現(xiàn)出錯(cuò)誤頁(yè),錯(cuò)誤頁(yè)會(huì)呈現(xiàn)一些服務(wù)器環(huán)境的信息以及調(diào)試信息(如果開(kāi)啟了詳細(xì)錯(cuò)誤模式),產(chǎn)品中提供前后臺(tái)錯(cuò)誤頁(yè)配置,可以通過(guò)自定義錯(cuò)誤頁(yè)達(dá)到屏蔽詳細(xì)信息、美化頁(yè)面效果以及提供更多功能的目的。
● 應(yīng)在系統(tǒng)日志記錄所有重要的日志事件數(shù)據(jù),系統(tǒng)確保日志記錄中包含的不可信數(shù)據(jù),不會(huì)在查看界面以代碼的形式被執(zhí)行。應(yīng)限制只有授權(quán)的管理員才能訪問(wèn)日志。不在日志中保存敏感信息,包括:不必要的系統(tǒng)詳細(xì)信息、會(huì)話標(biāo)識(shí)符或密碼。
● 應(yīng)記錄所有失敗的輸入驗(yàn)證。應(yīng)記錄所有的身份驗(yàn)證嘗試,特別是失敗的驗(yàn)證。應(yīng)記錄所有失敗的訪問(wèn)控制。
● 當(dāng)頁(yè)面出現(xiàn)服務(wù)器內(nèi)部錯(cuò)誤時(shí),可以通過(guò)開(kāi)啟記錄功能,將異常信息記錄到日志文件中,可以配置同一類內(nèi)部錯(cuò)誤記錄時(shí)間間隔,日志會(huì)以文件的形式保存在網(wǎng)站的受保護(hù)的目錄下以防下載。
● 支持“敏感信息黑匣子”功能,利用web.config中配置的自定義錯(cuò)誤頁(yè)和全局的異常處理,屏蔽異常出現(xiàn)時(shí)暴露的敏感信息。捕獲系統(tǒng)的所有出現(xiàn)異常的地方,做到友好的錯(cuò)誤提示信息,不要暴露敏感信息。對(duì)于用戶登錄的地方,在驗(yàn)證時(shí)盡量模糊提示。如:當(dāng)?shù)卿洺鲥e(cuò)時(shí)都一致提示(用戶名或密碼不正確?。┠苡行г黾用艽a暴破的難度。采用動(dòng)態(tài)表單,就增加了ARP嗅探軟件捕獲密碼的難度,因此重要登錄信息采用隨機(jī)表單形式,大大保護(hù)了數(shù)據(jù)包被截取的難度。
三、用戶體驗(yàn)優(yōu)化方面的要求
● 用戶名的校驗(yàn)規(guī)則與即時(shí)反饋(包含長(zhǎng)度限制、格式限制等);
● 密碼的校驗(yàn)規(guī)則與即時(shí)反饋(包含長(zhǎng)度限制、格式限制、是否符合強(qiáng)密碼規(guī)則);
● 用戶名/密碼為空時(shí)的提示語(yǔ);
● 密碼輸入框可以顯示原始密碼,以讓用戶可以檢查是否輸入正確;
● 各種異常情況的預(yù)處理;
● 界面設(shè)計(jì)與優(yōu)化,包含多種登錄方式的切換、雙因子驗(yàn)證、二次驗(yàn)證的流程設(shè)計(jì)與優(yōu)化;
● 一開(kāi)始并不要求輸入驗(yàn)證碼,而是在登錄失敗次數(shù)達(dá)到3次(可配置)時(shí)才要求輸入,以方便用戶平時(shí)快速登錄,同時(shí)兼顧安全性要求。
● 瀏覽器兼容性,要考慮從Chrome/Edge的最新版本到各種老的瀏覽器(比如IE9)都要兼容。
● 各種常見(jiàn)分辨率(1024/1280/1366/1440/1600/1920/2560)的適配與優(yōu)化,頁(yè)面應(yīng)采用響應(yīng)式設(shè)計(jì);
● 手機(jī)適配與優(yōu)化,應(yīng)支持在各種手機(jī)瀏覽器和微信、企業(yè)微信、釘釘中訪問(wèn)登錄頁(yè)時(shí)能正常使用,頁(yè)面效果和用戶體驗(yàn)專為手機(jī)訪問(wèn)而優(yōu)化;
● 微信/企業(yè)微信/釘釘授權(quán)登錄的用戶體驗(yàn)優(yōu)化,應(yīng)支持在微信/企業(yè)微信/釘釘內(nèi)打開(kāi)登錄頁(yè)時(shí),可以直接授權(quán)登錄,不需要再掃碼登錄。
● 應(yīng)支持無(wú)障礙訪問(wèn),支持驗(yàn)證碼放大功能,支持語(yǔ)音驗(yàn)證碼;
● 應(yīng)支持適老化,老年人訪問(wèn)時(shí)可以有專門的長(zhǎng)者模式;
● 手機(jī)訪問(wèn)時(shí)也應(yīng)支持無(wú)障礙和適老化;
四、開(kāi)放性方面的要求
● 應(yīng)使用OAuth 2.0開(kāi)放標(biāo)準(zhǔn)來(lái)進(jìn)行用戶的授權(quán)登錄,以易于同其他采用相關(guān)標(biāo)準(zhǔn)的系統(tǒng)進(jìn)行整合。
● 應(yīng)支持接入第三方統(tǒng)一身份認(rèn)證平臺(tái)(單點(diǎn)登錄);
● 應(yīng)支持微信掃碼登錄、微信授權(quán)登錄、企業(yè)微信掃碼登錄、企業(yè)微信授權(quán)登錄、釘釘掃碼登錄、釘釘授權(quán)登錄等第三方平臺(tái)的登錄;
● 應(yīng)支持多種登錄方式后產(chǎn)生的不同賬戶進(jìn)行合并;
● 應(yīng)提供標(biāo)準(zhǔn)、規(guī)范的用戶 API 接口,以實(shí)現(xiàn)廣泛的第三方系統(tǒng)集成;
● 為支持手機(jī)短信免密登錄、微信掃碼登錄等需求,需要接入各種第三方平臺(tái)(比如手機(jī)短信發(fā)送平臺(tái)、微信開(kāi)放平臺(tái)、釘釘開(kāi)放平臺(tái))的API接口;
五、信創(chuàng)適配方面的要求
● 應(yīng)可以運(yùn)行在中標(biāo)麒麟/銀河麒麟/統(tǒng)信等國(guó)產(chǎn)操作系統(tǒng)以及Windows Server、Linux等主流的服務(wù)器操作系統(tǒng)上。這個(gè)主要是和開(kāi)發(fā)平臺(tái)有關(guān)。
● 應(yīng)支持達(dá)夢(mèng)/翰高/人大金倉(cāng)等國(guó)產(chǎn)數(shù)據(jù)庫(kù)軟件以及SQL Server、Oracle、MySQL、PostgreSQL 等主流數(shù)據(jù)庫(kù)軟件,因?yàn)槊糠N數(shù)據(jù)庫(kù)支持的SQL語(yǔ)法都有差異,所以寫代碼時(shí)要注意各種數(shù)據(jù)庫(kù)操作(建表、添加/修改/刪除字段、查詢/添加/修改/刪除記錄等)要針對(duì)每種數(shù)據(jù)庫(kù)的差異進(jìn)行適配和優(yōu)化。
● 應(yīng)支持金蝶ADMQ等國(guó)產(chǎn)消息隊(duì)列中間件和RabbitMQ,應(yīng)支持金蝶AMDC、東方通TongRDS、寶蘭德CacheServer等國(guó)產(chǎn)分布式緩存中間件和Redis,應(yīng)支持金蝶ALB、東方通TongHttpServer、寶蘭德WebServer等國(guó)產(chǎn)應(yīng)用服務(wù)器中間件和Nginx。
● 應(yīng)支持國(guó)密算法,數(shù)據(jù)加密應(yīng)優(yōu)先使用國(guó)密算法。
六、擴(kuò)展性方面的要求
● 軟件的可擴(kuò)展性主要是指系統(tǒng)設(shè)計(jì)不僅基于當(dāng)前的應(yīng)用需求,而且還要考慮未來(lái)的發(fā)展需求。比如分層架構(gòu)、模塊化的設(shè)計(jì)、開(kāi)放的接口、插件機(jī)制、支持不同數(shù)據(jù)庫(kù)等都是一些可擴(kuò)展性的具體表現(xiàn)。應(yīng)基于插件機(jī)制來(lái)實(shí)現(xiàn)接入各種第三方統(tǒng)一身份認(rèn)證平臺(tái),即系統(tǒng)要實(shí)現(xiàn)插件機(jī)制,然后每個(gè)第三方統(tǒng)一身份認(rèn)證平臺(tái)的接入做成一個(gè)插件,以避免項(xiàng)目定制化開(kāi)發(fā)帶來(lái)的無(wú)法跟隨產(chǎn)品升級(jí)的最大弊端。
● 用戶信息應(yīng)支持?jǐn)U展字段機(jī)制??梢允褂脭U(kuò)展字段來(lái)要求用戶注冊(cè)時(shí)填寫更多信息。擴(kuò)展字段的類型應(yīng)支持盡可能多的數(shù)據(jù)類型。比如:布爾型(復(fù)選框、按鈕組、下拉列表框、單選框、開(kāi)關(guān))、日期時(shí)間(日期、日期時(shí)間、生日)、整數(shù)型(整數(shù)輸入框、單選框、下拉列表、單選列表框、雙向列表框)、浮點(diǎn)型(浮點(diǎn)型輸入框、金額輸入框)、短文本(標(biāo)準(zhǔn)單行文本輸入框、復(fù)選框、下拉列表框、列表框、雙向列表框、組合輸入框)、長(zhǎng)文本(標(biāo)準(zhǔn)多行文本輸入框(不支持 HTML)、HTML 編輯器)、文件上傳(單圖片上傳、多圖片上傳、單視頻上傳、多視頻上傳、單音頻上傳、多音頻上傳、單文件上傳、多文件上傳)、常用信息(姓名、身份證、電子郵件、手機(jī)號(hào)碼、電話號(hào)碼、QQ 號(hào)碼、郵政編碼、網(wǎng)頁(yè)地址、行政區(qū)劃)、生活場(chǎng)景(IP 地址、車牌號(hào)碼、地理位置、顏色、航班、火車車次)、特殊字段(聯(lián)動(dòng)字段)等。
七、可伸縮性方面的要求
軟件的可伸縮性是指軟件系統(tǒng)可以在不同規(guī)模、不同檔次的運(yùn)行環(huán)境平臺(tái)上運(yùn)行的能力。也就是說(shuō),系統(tǒng)應(yīng)支持從單機(jī)部署、雙機(jī)熱備、WEB與數(shù)據(jù)庫(kù)分離部署、前后臺(tái)分離部署、多臺(tái)服務(wù)器負(fù)載均衡部署、讀寫分離部署等各種部署方案。當(dāng)采用前后臺(tái)分離部署及多服務(wù)器負(fù)載均衡部署方案時(shí),用戶登錄模塊就要在代碼層面考慮使用分布式緩存等來(lái)保證各服務(wù)器間保持用戶登錄狀態(tài)的一致性等問(wèn)題。
八、可靠性方面的要求
軟件的可靠性(健壯性/穩(wěn)定性)主要是指軟件的相應(yīng)功能應(yīng)能在復(fù)雜的運(yùn)行環(huán)境里穩(wěn)定、可靠地運(yùn)行,在出現(xiàn)異常的情況下,系統(tǒng)應(yīng)具備相應(yīng)的容錯(cuò)機(jī)制等。換句話說(shuō),其實(shí)就是要求軟件的BUG要盡可能的少,各種未知情況都有考慮,對(duì)各種異常情況都有容錯(cuò)機(jī)制。用戶登錄這個(gè)模塊對(duì)可靠性方面有著極高的要求,因?yàn)橛脩舻卿浤K也通常是最容易受到攻擊的模塊,攻擊者會(huì)用各種意想不到的方法和手段來(lái)進(jìn)行掃描、探測(cè)和攻擊。
總結(jié)
如果從零開(kāi)始研發(fā)用戶登錄功能模塊并實(shí)現(xiàn)上述所有需求,沒(méi)有幾個(gè)月時(shí)間是不可能做到的。功能研發(fā)出來(lái)以后,還要再花幾個(gè)月時(shí)間來(lái)不斷修復(fù)BUG,完善細(xì)節(jié)。如果這不是產(chǎn)品化的研發(fā),而是項(xiàng)目定制方式的研發(fā),客戶需要支付的研發(fā)成本將高得不可想象。即使基于市面上的一些開(kāi)源框架來(lái)開(kāi)發(fā),也需要大量的二次開(kāi)發(fā)工作,因?yàn)檫@些開(kāi)源框架在用戶登錄方面也沒(méi)有動(dòng)易WebFuture考慮周全。
而且這還只是用戶登錄,還沒(méi)有考慮用戶注冊(cè)、找回密碼等相關(guān)功能,沒(méi)有考慮用戶中心的賬戶管理相關(guān)功能(修改信息、修改密碼、綁定/修改郵箱/手機(jī)/微信/企業(yè)微信/釘釘、賬號(hào)合并等),沒(méi)有考慮后臺(tái)的用戶管理相關(guān)功能(查看、修改、鎖定/解鎖、重置密碼、刪除、分配用戶組、用戶組管理、權(quán)限控制、各種參數(shù)配置等)。整個(gè)完整的用戶模塊至少需要一人年來(lái)開(kāi)發(fā)。
就這還沒(méi)有考慮用戶登錄以后的任何業(yè)務(wù)需求,比如收藏、點(diǎn)贊、評(píng)論、投票、寫信、投稿……
用戶登錄
還沒(méi)有賬號(hào)?
立即注冊(cè)