前端驗證還是后端驗證

(Proudly powered by QKQ)

最近有個項目,其采用了前后端分離策略外莲,架構師提出:僅在前端作驗證猪半,后端不作驗證,認為傳入的數(shù)據(jù)是已經(jīng)在前端經(jīng)過了充分驗證了的偷线。提出這個的原因是該系統(tǒng)為內(nèi)部系統(tǒng)办龄,僅有內(nèi)部人員使用,如果出現(xiàn)有人繞過前端淋昭,直接訪問后端的情況,可以做事后處理和追溯安接。

那么翔忽,針對普通的項目,應當如何處理前端驗證和后端驗證呢盏檐?

Q: 這里的驗證的場景是什么歇式?

A: 比如說,用戶注冊胡野。用戶需要填寫一個表單材失,輸入諸如用戶名、密碼硫豆、郵箱龙巨、公司等信息笼呆,點擊提交,完成注冊旨别。
其中诗赌,這個表單需要驗證,可能的驗證規(guī)則有:

  • 用戶名不能有特殊字符秸弛,如%¥#@&
  • 郵箱必須符合正確的郵箱格式铭若,如koly@123.com
  • 用戶名不能重復
  • 密碼必須包含數(shù)字、小寫字母递览、大寫字母叼屠、特殊字符,且長度不能少于8位

Q: 前端驗證和后端驗證都是必須的嗎绞铃?

A: 從必要的角度來說镜雨,前端可以不做驗證,但是后端的驗證是必須做的憎兽。
為什么呢冷离?
前端不做驗證,但是在表單提交的時候纯命,后端驗證的結果會返回前端西剥,前端需要解析結果,顯示對應的內(nèi)容亿汞。對于驗證不通過的情況瞭空,需要展示相應的不通過的原因。
后端驗證一定要有疗我,是因為后端才是接收數(shù)據(jù)咆畏,并對數(shù)據(jù)進行操作和存儲的。只要保證了接收到的數(shù)據(jù)有足夠的驗證吴裤,就能保證最終存儲的數(shù)據(jù)是滿足了業(yè)務驗證條件的旧找,不是“臟數(shù)據(jù)”。
如果僅有前端驗證麦牺,沒有后端驗證钮蛛。在前后端分離的情況下,用戶可以繞過前端剖膳,直接訪問后端接口魏颓。那么前端驗證也就失效了。也就等于沒有對數(shù)據(jù)的業(yè)務驗證了吱晒。
同時甸饱,如果僅有前端驗證,部分驗證功能不好滿足。比如判斷數(shù)據(jù)庫是否存在相同的用戶名叹话,此時需要查詢數(shù)據(jù)庫才能判斷偷遗。如果前端不同后端交互,那么是不清楚用戶名是否重復的渣刷。
K: 后端有鹦肿,前端可無

Q: 前端驗證和后端驗證都是對同一個數(shù)據(jù)的驗證,有什么區(qū)別辅柴?

A: 二者的目的不同:

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

有了不同的目的碌嘀,我們在設計前端驗證的時候涣旨,其出發(fā)點是更好的用戶體驗,即更好地引導客戶舒適地完成表單的正確填寫股冗。比如針對密碼設置霹陡,使用提示信息分行列出密碼的規(guī)則,當密碼輸入完畢之后止状,實時檢驗驗證規(guī)則是否滿足烹棉,對于滿足的規(guī)則,展示為綠色怯疤,并在規(guī)則前打勾浆洗,不滿足的規(guī)則展示為灰色,并在規(guī)則前打叉集峦。
K: 前端體驗伏社,后端保證

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

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

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

所以塔淤,追求用戶體驗的情況下摘昌,二者都是需要的。

Q: 后端驗證就是數(shù)據(jù)庫限制么高蜂?

A: 不是聪黎。數(shù)據(jù)庫限制僅是數(shù)據(jù)上的一些約束,比如一個表里面的varchar長度最大為40备恤。
除了數(shù)據(jù)庫限制之外稿饰,還有業(yè)務限制。比如這個varchar的具體內(nèi)容應該滿足什么樣的格式烘跺。以上述的注冊表單為例,可能使用varchar(256)作為存儲郵件脂崔,但是數(shù)據(jù)庫并不會驗證其值為正確的郵箱格式滤淳。
K: 業(yè)務限制,數(shù)據(jù)限制(constraints)

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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砌左,一起剝皮案震驚了整個濱河市铺敌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偿凭,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弯囊,死亡現(xiàn)場離奇詭異,居然都是意外死亡胶果,警方通過查閱死者的電腦和手機匾嘱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門早抠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霎烙,“玉大人蕊连,你說我怎么就攤上這事悬垃。” “怎么了甘苍?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵尝蠕,是天一觀的道長。 經(jīng)常有香客問我趟佃,道長昧捷,這世上最難降的妖魔是什么闲昭? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任靡挥,我火速辦了婚禮,結果婚禮上跋破,老公的妹妹穿的比我還像新娘。我一直安慰自己毒返,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布劲绪。 她就那樣靜靜地躺著,像睡著了一般贾富。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颤枪,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音畏纲,去河邊找鬼。 笑死台囱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的簿训。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼强品,長吁一口氣:“原來是場噩夢啊……” “哼屈糊!你這毒婦竟也來了的榛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤逻锐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晓淀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡凶掰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年蜈亩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畅涂。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡道川,死狀恐怖午衰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苇经,我是刑警寧澤宦言,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站蜘澜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鄙信。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一装诡、第九天 我趴在偏房一處隱蔽的房頂上張望践盼。 院中可真熱鬧,春花似錦咕幻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玄叠。三九已至,卻和暖如春诸典,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狐粱。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工胆数, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人必尼。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓篡撵,卻偏偏與公主長得像豆挽,于是被迫代替她去往敵國和親育谬。 傳聞我的和親對象是個殘疾皇子帮哈,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容