關於前端驗證還是后端驗證


前端驗證還是后端驗證

背景

      軟件應用研發中, 前端驗證還是后端驗證這是意識與認知問題。鑒於某些入門同學還不清楚,我們再來看下:

一.  從軟件行業來自國外

Q: 前端驗證和后端驗證都是對同一個數據的驗證,有什么區別?

A: 二者的目的不同:

  • 前端驗證是為了提供更好的用戶體驗;
  • 后端驗證是為了保證數據滿足業務條件(business invariants);

有了不同的目的,我們在設計前端驗證的時候,其出發點是更好的用戶體驗,即更好地引導客戶舒適地完成表單的正確填寫。比如針對密碼設置,使用提示信息分行列出密碼的規則,當密碼輸入完畢之后,實時檢驗驗證規則是否滿足,對於滿足的規則,展示為綠色,並在規則前打勾,不滿足的規則展示為灰色,並在規則前打叉。
K: 前端體驗,后端保證

Q: 為什么一般都是前端驗證和后端驗證同時存在?

A: 綜合上述兩個問題的答案:

  • 后端驗證必須存在
  • 前端是為了更好的用戶體驗

所以,追求用戶體驗的情況下,二者都是需要的

參考資料:
[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

二.  國內社區

      后端才是最終的保障。總之,一切用戶的輸入都是不可信的

      業務復雜、后期維護多、安全可用性要求高,如:電商項目的維護,這種方式要同時使用前后端校驗,前端校驗的目的是為了把更多的錯誤請求都在瀏覽器層面就已經攔截處理,不會消耗服務端的內存和線程數,可以提供性能;對於還要進行后端校驗是為了提高系統的穩定性,不要動不動就500,還能防止一些人惡意攻擊網站等等。

       后端驗證是防止接口被私自調用導致破壞數據庫結構,如果后端不驗證,相當於數據庫就裸奔了。

       B/S 系統中對http 請求數據的校驗多數在客戶端進行,這也是出於簡單及用戶體驗性上考慮,但是在一些安全性要求高的系統中服務端校驗是不可缺少的,實際上,幾乎所有的系統,凡是涉及到數據校驗,都需要在服務端進行二次校驗。為什么要在服務端進行二次校驗呢?這需要理解客戶端校驗和服務端校驗各自的目的。

  1. 客戶端校驗,我們主要是為了提高用戶體驗,例如用戶輸入一個郵箱地址,要校驗這個郵箱地址是否合法,沒有必要發送到服務端進行校驗,直接在前端用 js 進行校驗即可。但是大家需要明白的是,前端校驗無法代替后端校驗,前端校驗可以有效的提高用戶體驗,但是無法確保數據完整性,因為在 B/S 架構中,用戶可以方便的拿到請求地址,然后直接發送請求,傳遞非法參數。
  2. 服務端校驗,雖然用戶體驗不好,但是可以有效的保證數據安全與完整性。
  3. 綜上,實際項目中,兩個一起用。

      應用程序的輸入數據首先應該被檢驗是否有效。輸入的數據能被用戶或其他應用程序提交。在Web應用中,通常進行2次數據有效性檢驗:包括客戶端檢驗和服務端檢驗。客戶端的檢驗主要是使用戶有一個好的用戶體驗。 首先最好是在客戶端檢驗其表單輸入的有效性並且展示給客戶端的那些字段輸入是無效的。但是,服務器端的校驗是更關鍵和不可缺失的(不要只做客戶端檢驗而不做服務器端檢驗)。服務器端的檢驗通常是被應用服務(層)執行,應用服務(層)中的方法首先檢驗數據的有效性,然后才使用這些通過驗證的數據。

refs:

https://www.cnblogs.com/jpfss/p/10937031.html
https://www.cnblogs.com/qiuwenli/p/13423995.html
https://www.zhihu.com/question/264692298
https://www.cnblogs.com/Leo_wl/p/4700748.html?utm_medium=referral&utm_source=itdadao
https://blog.csdn.net/chuanaiqi5565/article/details/100871433

三.阿里JAVA開發手冊-有效性驗證

Catch(10-30-09-33-23)

【推薦】發貼、評論、發送即時消息等用戶生成內容的場景必須實現防刷、文本內容違禁詞過濾等風控策略。

refs: https://developer.aliyun.com/topic/java20



今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管管,團隊建設 有參考作用 , 您可能感興趣的文章:
領導人怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平台的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟件工程的迷思
企業項目化管理介紹
軟件項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
項目管理溝通計划
構建高效的研發與自動化運維
某大型電商雲平台實踐
互聯網數據庫架構設計思路
IT基礎架構規划方案一(網絡系統規划)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之采購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變

如有想了解更多軟件設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關注我的微信訂閱號:

MegadotnetMicroMsg_thumb1_thumb1_thu[2]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 該文章也同時發布在我的獨立博客中-Petter Liu Blog。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM