在生產方面,我使用我的方法對發送到服務器的每個數據字段進行客戶端檢查(類型,長度,正則表達式等)。當然,我會在相關方法中仔細檢查服務器上的所有內容。爲什麼我會使用check()而不是Match.test()?
考慮到每種類型或格式的錯誤情況都應該由客戶端代碼處理,我假設在服務器上,最好是安靜地處理錯誤而不是拋出明確的錯誤:數據必然來自客戶端原始代碼已被篡改(如果我所有的客戶端檢查都可以)。在實踐中,我會再使用Match.test()
(悄悄),而不是check()
(拋出錯誤)
這是一個很好的做法,悄悄地處理服務器錯誤每次發生在服務器時間,如果這種錯誤應該被標記上客戶第一?如果不是,爲什麼?
此外,我考慮跟蹤這些安靜的錯誤,並自動阻止或標記帳戶重複他們超過x次。這是一個好主意嗎?
不能認爲任何驗證已完成客戶端。 – charlietfl
請給我們看一些代表性的代碼。我們無法在沒有看到實際代碼的情況下對編碼實踐發表評論。另外,我想你是問你應該如何處理服務器上的某些類型的錯誤,這完全是特定於應用程序的,並且你沒有給我們特定的上下文來用於參與這類問題。除了必須始終假定來自客戶端的所有數據都可能是垃圾,沒有一般的答案,錯誤處理的細節以及發現錯誤時該怎麼做總是與特定情況相關。 – jfriend00
@charlietfl如果我編寫客戶端並添加驗證,爲什麼我不認爲這個驗證應該運行?與其考慮你根本不相信客戶,你可以認爲具有不可預測行爲的客戶在安全性方面是有意義的。 – Billybobbonnet