2010-07-01 25 views
3

爲了安全起見,我已經從博客的其中一個讀取,其建議在服務器端而不是客戶端執行 輸入數據驗證。客戶端驗證疑惑

從上面的陳述中,我的腦海裏開始詢問,然後 1)在客戶端,JS可以做什麼樣的驗證。 2)是否有任何規則讓程序員可以決定需要執行驗證的地方,無論是在客戶端還是服務器端?

我建立基於Java的Web應用程序

回答

2

如果用戶禁用JavaScript的您的驗證不會發生在客戶端,在具有唯一的服務器端驗證對方意味着用戶必須等待呼叫結束(客戶端到服務器,然後返回),它可能會讓他感到沮喪。

客戶端驗證是爲了讓用戶滿意,這樣他就不必等待太多才能看到他拼錯了郵件地址。

2

我認爲主要的一點是,你應該在服務器端偏執,而不是假設傳遞給你的數據已被客戶端正確驗證。客戶端可能是舊版本,它不能正確驗證某些內容,或者驗證可能被禁用 - 或者請求可能來自破解者,試圖破壞系統。

當然,部分(或全部)驗證也可以在客戶端執行,以避免無用的網絡流量並縮短延遲。

6

您可以對客戶端進行任何驗證,但絕對不能依賴該驗證。

對於用戶界面來說,在客戶端驗證通常是一個好主意,因爲響應時間更快。但由於用戶總是可以關閉客戶端驗證(例如通過關閉JavaScript),所以您決不能依賴它來實際執行並重新驗證您在服務器上的輸入。

一般來說,如果檢查對安全至關重要,則不要在用戶可以控制的系統上執行檢查。

5

那麼,當黑客用自己的喜好替換你的JavaScript,或者只是簡單地提交POSTs和GETs,就好像它是你的代碼一樣,會發生什麼?

在客戶端驗證是一個可用性問題。

在USAGE點驗證是一個安全問題。

例如,在存儲到SQL數據庫之前,您將針對SQL注入的數據進行驗證 - 如果您選擇一個好的數據庫,該庫會爲您執行此操作。當您將數據顯示爲HTML時,您可以根據CSS驗證數據。但是,如果您將數據作爲XML,RSS或JSON公開,那麼驗證是不同的 - 如果您僅在輸入時對其進行驗證,則不會阻止針對其他格式的漏洞利用,並且您的輸入例程將綁定到輸出您選擇的格式。

規則: - 客戶端驗證可以很容易地繞開。無論客戶端驗證如何,您都應該驗證服務器上的敏感數據。在客戶端驗證它們只是改善用戶體驗的問題。

1

客戶端驗證只是爲了節省客戶端時間,所以當他們輸入和無效的值時,它說「不好的價值」,沒有頁面需要重新加載。

雖然客戶端驗證應視爲NO驗證,因爲客戶端可以禁用此驗證並輸入錯誤的值。

服務器應始終驗證輸入的數據。客戶端驗證僅適用於可用性。

+0

客戶端如何禁用驗證?你能告訴我 – gmhk 2010-07-01 11:43:50

+2

Firefox例如可以讓你在你的瀏覽器中禁用Javascript。 – 2010-07-01 12:05:35