我使用jQuery validate插件在客戶端驗證輸入數據。 是否需要在服務器端進行驗證(如果客戶端有效)? 如果我只在客戶端驗證,是否存在安全風險?如果客戶端驗證已完成,服務器端模型驗證是否需要?
回答
對客戶端發生的事情絕對不信任。您收到的所有值都可以直接發送,或者通過支持它的任何工具(如Postman,Fiddler等)進行擴充。它並不需要太深入的知識,所以您應該期望任何人都能夠做到這一點。
這意味着您不僅應該驗證您收到的數據的方式至少與您在客戶端上執行的方式相同,還應該確保執行操作的用戶有權訪問這些數據。例如。如果您收到更新Id = 6的某個對象的請求,則應始終驗證該用戶是否有權執行該操作(例如,該對象屬於該用戶等)。如果沒有這個,就很容易「破解」你的網站(只需要修改Id = 7執行相同的請求)
這並不意味着你不應該在客戶端進行驗證。但客戶驗證的原因是不同的。它通過即時反饋(無回傳)提供更好的用戶體驗,而不是信任來自客戶端的任何內容。
關於你的問題的答案:這取決於。很有可能不涉及安全風險。例如。如果您的驗證檢查該電子郵件是有效的,則可以繞過該電子郵件,但唯一可能的風險是您無法發送郵件,例如等等。如果您檢查該電話不是空的,那麼您可能會冒這個風險將會是空的或者無法插入數據庫中。
在這種情況下,您可能決定不打擾,因爲您的應用程序的有效使用不允許這樣做,並且它不會成爲用戶發佈錯誤數據的安全風險。因此,像往常一樣,您應該決定是否值得花時間實施服務器驗證。請記住,這並不意味着您可以跳過上述重要的事情,即驗證用戶是否有權訪問等。
在任何情況下,與客戶端具有相同的服務器端驗證是有益的,但如果值得的話,是另一個問題。
是,總是需要服務器端驗證,因爲客戶端驗證可以通過禁用JavaScript的
這並不像你在這裏寫的那樣直截了當,因爲沒有服務器端驗證(對應於客戶端驗證電話,電子郵件等)可能根本沒有安全問題。下面我寫了一個更全面的答案。所以,即使客戶端驗證不能被繞過,也不一定是安全問題。 –
我絕對不希望在代碼兩端都做每一個驗證。有些事情你不需要它。 –
如果您以聲明方式使用帶有數據註釋的模型,則可以非常容易地執行這兩種操作,這就是您輕鬆連接客戶端驗證的方式,同樣的事情允許您只需在控制器操作中檢查ModelState.IsValid。 –
決不信任用戶,並通過服務器端總是有效的被繞過。例如,通過發送無效數據(可能是攻擊向量),請求可能會很容易被欺騙。
- 1. WCF - 是否需要驗證客戶端的服務證書?
- 2. 客戶端和服務器端驗證的驗證摘要
- 3. 在服務器端檢查客戶端驗證是否成功
- 4. HTML5:我是否需要在客戶端和服務器端驗證Webform,還是隻需要客戶端?
- 5. 客戶端和服務器端驗證
- 6. 服務器端/客戶端驗證.net
- 7. 如何維護服務器端驗證和客戶端驗證
- 8. 客戶端驗證和服務器端驗證
- 9. 骨幹:部分客戶端驗證+服務器端驗證
- 10. 規則:客戶端驗證與服務器端驗證?
- 11. 平衡asp.net服務器端驗證與客戶端jQuery驗證
- 12. 如何繞過ASP.NET客戶端驗證來驗證服務器端驗證
- 13. 需要證書才能完成客戶端身份驗證
- 14. 是否需要在用asp.net網站進行客戶端驗證之後進行服務器端驗證?
- 15. asp.net驗證客戶端或客戶端或服務器端
- 16. 客戶端和服務器驗證
- 17. 服務器客戶端消息驗證
- 18. 服務器客戶端身份驗證
- 19. 驗證客戶端與服務器
- 20. 服務器端驗證是通過數據註釋來完成的,而不是做客戶端驗證
- 21. Controling驗證摘要的客戶端和服務器端
- 22. Ajax工具包驗證是服務器端還是客戶端?
- 23. 服務器端的客戶端證書驗證DEPTH_ZERO_SELF_SIGNED_CERT錯誤
- 24. Rails服務器端驗證 - belongs_to模型
- 25. 集成客戶端驗證
- 26. 如何在客戶端驗證和服務器端驗證同步?
- 27. ASP.Net MVC 3 JSON模型綁定和服務器端模型驗證混合客戶端驗證
- 28. 如何限制服務器端驗證,直到完成客戶端驗證jquery ajax
- 29. Html.beginform驗證服務器端和客戶端端
- 30. 客戶端驗證
謝謝伊利亞的全面回答。這非常有幫助。從安全的角度來看,你是對的。 Joe Audette提到的情況也是可能發生的另一個問題。比你們。 – user1331586
歡迎:) –