背景
??????軟件應(yīng)用研發(fā)中, 前端驗(yàn)證還是后端驗(yàn)證這是意識(shí)與認(rèn)知問(wèn)題。鑒于某些入門同學(xué)還不清楚,我們?cè)賮?lái)看下:
一.? 從軟件行業(yè)來(lái)自國(guó)外
Q: 前端驗(yàn)證和后端驗(yàn)證都是對(duì)同一個(gè)數(shù)據(jù)的驗(yàn)證,有什么區(qū)別?
A: 二者的目的不同:
- 前端驗(yàn)證是為了提供更好的用戶體驗(yàn);
- 后端驗(yàn)證是為了保證數(shù)據(jù)滿足業(yè)務(wù)條件(business invariants);
有了不同的目的,我們?cè)谠O(shè)計(jì)前端驗(yàn)證的時(shí)候,其出發(fā)點(diǎn)是更好的用戶體驗(yàn),即更好地引導(dǎo)客戶舒適地完成表單的正確填寫。比如針對(duì)密碼設(shè)置,使用提示信息分行列出密碼的規(guī)則,當(dāng)密碼輸入完畢之后,實(shí)時(shí)檢驗(yàn)驗(yàn)證規(guī)則是否滿足,對(duì)于滿足的規(guī)則,展示為綠色,并在規(guī)則前打勾,不滿足的規(guī)則展示為灰色,并在規(guī)則前打叉。
K: 前端體驗(yàn),后端保證
Q: 為什么一般都是前端驗(yàn)證和后端驗(yàn)證同時(shí)存在?
A: 綜合上述兩個(gè)問(wèn)題的答案:
- 后端驗(yàn)證必須存在
- 前端是為了更好的用戶體驗(yàn)
所以,追求用戶體驗(yàn)的情況下,二者都是需要的
參考資料:
[1]?https://stackoverflow.com/questions/17039934/is-it-practical-to-have-back-end-database-side-validation-for-everything
[2]?https://stackoverflow.com/questions/162159/javascript-client-side-vs-server-side-validation
[3]?https://www.quora.com/Should-I-do-input-validation-on-the-front-end-or-back-end
二.? 國(guó)內(nèi)社區(qū)
????? 后端才是最終的保障。總之,一切用戶的輸入都是不可信的。
????? 業(yè)務(wù)復(fù)雜、后期維護(hù)多、安全可用性要求高,如:電商項(xiàng)目的維護(hù),這種方式要同時(shí)使用前后端校驗(yàn),前端校驗(yàn)的目的是為了把更多的錯(cuò)誤請(qǐng)求都在瀏覽器層面就已經(jīng)攔截處理,不會(huì)消耗服務(wù)端的內(nèi)存和線程數(shù),可以提供性能;對(duì)于還要進(jìn)行后端校驗(yàn)是為了提高系統(tǒng)的穩(wěn)定性,不要?jiǎng)硬粍?dòng)就500,還能防止一些人惡意攻擊網(wǎng)站等等。
?????? 后端驗(yàn)證是防止接口被私自調(diào)用導(dǎo)致破壞數(shù)據(jù)庫(kù)結(jié)構(gòu),如果后端不驗(yàn)證,相當(dāng)于數(shù)據(jù)庫(kù)就裸奔了。
?????? B/S 系統(tǒng)中對(duì)http 請(qǐng)求數(shù)據(jù)的校驗(yàn)多數(shù)在客戶端進(jìn)行,這也是出于簡(jiǎn)單及用戶體驗(yàn)性上考慮,但是在一些安全性要求高的系統(tǒng)中服務(wù)端校驗(yàn)是不可缺少的,實(shí)際上,幾乎所有的系統(tǒng),凡是涉及到數(shù)據(jù)校驗(yàn),都需要在服務(wù)端進(jìn)行二次校驗(yàn)。為什么要在服務(wù)端進(jìn)行二次校驗(yàn)?zāi)兀窟@需要理解客戶端校驗(yàn)和服務(wù)端校驗(yàn)各自的目的。
- 客戶端校驗(yàn),我們主要是為了提高用戶體驗(yàn),例如用戶輸入一個(gè)郵箱地址,要校驗(yàn)這個(gè)郵箱地址是否合法,沒(méi)有必要發(fā)送到服務(wù)端進(jìn)行校驗(yàn),直接在前端用 js 進(jìn)行校驗(yàn)即可。但是大家需要明白的是,前端校驗(yàn)無(wú)法代替后端校驗(yàn),前端校驗(yàn)可以有效的提高用戶體驗(yàn),但是無(wú)法確保數(shù)據(jù)完整性,因?yàn)樵?B/S 架構(gòu)中,用戶可以方便的拿到請(qǐng)求地址,然后直接發(fā)送請(qǐng)求,傳遞非法參數(shù)。
- 服務(wù)端校驗(yàn),雖然用戶體驗(yàn)不好,但是可以有效的保證數(shù)據(jù)安全與完整性。
- 綜上,實(shí)際項(xiàng)目中,兩個(gè)一起用。
????? 應(yīng)用程序的輸入數(shù)據(jù)首先應(yīng)該被檢驗(yàn)是否有效。輸入的數(shù)據(jù)能被用戶或其他應(yīng)用程序提交。在Web應(yīng)用中,通常進(jìn)行2次數(shù)據(jù)有效性檢驗(yàn):包括客戶端檢驗(yàn)和服務(wù)端檢驗(yàn)??蛻舳说臋z驗(yàn)主要是使用戶有一個(gè)好的用戶體驗(yàn)。 首先最好是在客戶端檢驗(yàn)其表單輸入的有效性并且展示給客戶端的那些字段輸入是無(wú)效的。但是,服務(wù)器端的校驗(yàn)是更關(guān)鍵和不可缺失的(不要只做客戶端檢驗(yàn)而不做服務(wù)器端檢驗(yàn))。服務(wù)器端的檢驗(yàn)通常是被應(yīng)用服務(wù)(層)執(zhí)行,應(yīng)用服務(wù)(層)中的方法首先檢驗(yàn)數(shù)據(jù)的有效性,然后才使用這些通過(guò)驗(yàn)證的數(shù)據(jù)。
refs:
https://www.cnblogs.com/jpfss/p/10937031.html
https://www.cnblogs.com/qiuwenli/p/13423995.html
前端的表單驗(yàn)證還有必要嗎? - 知乎
https://www.cnblogs.com/Leo_wl/p/4700748.html?utm_medium=referral&utm_source=itdadao
規(guī)范-前、后臺(tái)請(qǐng)求參數(shù)校驗(yàn)-CSDN博客
三.阿里JAVA開發(fā)手冊(cè)-有效性驗(yàn)證
【推薦】發(fā)貼、評(píng)論、發(fā)送即時(shí)消息等用戶生成內(nèi)容的場(chǎng)景必須實(shí)現(xiàn)防刷、文本內(nèi)容違禁詞過(guò)濾等風(fēng)控策略。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-767700.html
refs:?前端驗(yàn)證還是后端驗(yàn)證文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-767700.html
到了這里,關(guān)于到底是前端驗(yàn)證還是后端驗(yàn)證的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!