2016-03-15 66 views
0

在生產方面,我使用我的方法對發送到服務器的每個數據字段進行客戶端檢查(類型,長度,正則表達式等)。當然,我會在相關方法中仔細檢查服務器上的所有內容。爲什麼我會使用check()而不是Match.test()?

考慮到每種類型或格式的錯誤情況都應該由客戶端代碼處理,我假設在服務器上,最好是安靜地處理錯誤而不是拋出明確的錯誤:數據必然來自客戶端原始代碼已被篡改(如果我所有的客戶端檢查都可以)。在實踐中,我會再使用Match.test()(悄悄),而不是check()(拋出錯誤)

這是一個很好的做法,悄悄地處理服務器錯誤每次發生在服務器時間,如果這種錯誤應該被標記上客戶第一?如果不是,爲什麼?

此外,我考慮跟蹤這些安靜的錯誤,並自動阻止或標記帳戶重複他們超過x次。這是一個好主意嗎?

+0

不能認爲任何驗證已完成客戶端。 – charlietfl

+0

請給我們看一些代表性的代碼。我們無法在沒有看到實際代碼的情況下對編碼實踐發表評論。另外,我想你是問你應該如何處理服務器上的某些類型的錯誤,這完全是特定於應用程序的,並且你沒有給我們特定的上下文來用於參與這類問題。除了必須始終假定來自客戶端的所有數據都可能是垃圾,沒有一般的答案,錯誤處理的細節以及發現錯誤時該怎麼做總是與特定情況相關。 – jfriend00

+0

@charlietfl如果我編寫客戶端並添加驗證,爲什麼我不認爲這個驗證應該運行?與其考慮你根本不相信客戶,你可以認爲具有不可預測行爲的客戶在安全性方面是有意義的。 – Billybobbonnet

回答

0

你是對的,因爲服務器永遠不會在服務器上發生明確的異常而不處理它 - 這會導致你的服務器崩潰,這對每個人都是一個不錯的拒絕服務。

但是,服務器應該仍然能夠通過使用400類HTTP錯誤消息來通知用戶數據是否格式錯誤。安全性和用戶友好性都是在處理用戶輸入數據時必須考慮的事情,而且對於不可信的客戶端和速度較慢的服務器,兩個層都應該有提供它們的機制。

相關問題