Asp.net-Mvc

您在哪裡進行驗證?模型、控制器或視圖

  • June 26, 2011

您將使用者輸入驗證放在 Web 表單應用程序的什麼位置?

  1. 視圖:JavaScript 客戶端
  2. 控制器:伺服器端語言(C#…)
  3. 模型:數據庫(儲存過程或依賴項)

我認為每個級別都需要驗證:

  1. 使用者是否輸入了一個合理的值
  • 是日期實際日期,是數字實際數字…
  1. 再次執行 1. 中的所有檢查,並檢查惡意攻擊(IE XSS 或 SQL 注入)
  • 1.中所做的檢查主要是為了避免使用者出錯時伺服器往返。
  • 由於它們是在 javascript 中在客戶端完成的,因此您不能相信它們是在執行的。再次驗證這些值將阻止一些惡意攻擊。
  1. 是否滿足依賴關係(即使用者是否向有效問題添加了評論)
  • 一個好的界面使這些很難違反。如果有什麼東西在這裡被抓住了,那麼事情就很不對勁了。

[受此響應的啟發]

我檢查了所有層級,但我想說明我使用的驗證技巧。

我在數據庫層進行驗證,對模型的適當約束將提供自動數據完整性驗證。

這是大多數 Web 程序員似乎迷失的藝術。

模型中的驗證,可選的 UI 中的自動化常式,從模型中獲取提示並改善使用者體驗。

通過自動化常式,我的意思是使用者界面中不應該有任何每個模型的驗證程式碼。如果您有一個驗證方法庫,例如 RoR(具有 validates_presence_of :username 之類的方法),則控制器或視圖應該能夠讀取這些方法並應用等效的 javascript(或任何方便的方法)。

這意味著您必須在 ui 中復製完整的驗證庫,或者如果您使用預先存在的映射,則至少提供一個映射。但是一旦完成,您就不必在模型之外編寫任何驗證邏輯。

引用自:https://stackoverflow.com/questions/134388