2009-07-14 178 views
14

你應該在服務器端進行驗證,還是隻在客戶端進行驗證?你應該在服務器端進行驗證嗎?

@TheTXI

我很高興你驚訝我只是不想留下任何東西了,可能潛在的改變一個人回答給我的虛假信息。


,似乎有很多人談到了我的後去,但阿賈克斯的部分應該已經保存在我的問題,因爲這是最重要的部分。

但是閱讀帖子我知道一個壞人可以輕鬆地加載螢火蟲,並將我的按鈕更改爲提交按鈕併發布信息。或者以其他方式。

+2

如果用戶禁用Javascript,那麼對他們來說真的很不幸。你可以建議他們打開它來充分利用你的網站,但我真的不會爲非Javascript人員編寫代碼。 – AlbertoPL 2009-07-14 14:34:03

+2

另請參閱:http://stackoverflow.com/questions/162159/javascript-clientside-vs-serverside-validation/162579#162579 – 2009-07-14 14:54:12

+5

這是否設置了「大多數答案都說同樣的事情」的記錄? ;-) – 2009-07-14 15:16:00

回答

89

瀏覽器/客戶端驗證是一種方便。你不能依靠它。您絕對需要通過服務器端驗證來複制任何客戶端驗證。

6

總之是的。你永遠不能依靠瀏覽器發送給你的是合法的。

3

客戶端驗證可能會被規避 - 如果您沒有服務器端驗證,您將最終處理或保存無效或錯誤的數據。

以上可能是由於瀏覽器問題,如您不支持的某些瀏覽器版本。或者更糟糕的是,這可能是由於惡意用戶。

因此,有必要進行服務器端驗證。

8

是的,你應該總是做服務器端驗證。 Javascript/AJAX很好給用戶提供即時反饋,但它並沒有給你任何在服務器端的保護。

你只是不能相信用戶輸入。 Javascript驗證太容易繞過。因此,您需要檢查服務器端的輸入。

2

除了關閉Javascript的用戶問題之外,服務器端驗證對於安全性也是必需的。除了檢查必需字段之外,還需要檢查用戶提供的數據以防止SQL注入攻擊,跨站點腳本等。您必須在服務器端執行此操作,因爲用戶始終可以繞過Javascript並向您發送他們想要的任何數據。

33

好,很好,所有的代碼都是正確的。當黑客用自己喜歡的方式替換你的javascript時,會發生什麼?或者只是簡單地提交POST和GET,就好像它是你的代碼一樣?

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

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

最後一點很重要,因爲如果您在使用時未驗證,則會使代碼高度耦合。如果你改變了一個模塊,它會在別的地方破壞它,因爲你在錯誤的地方進行了驗證。

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

1

我認爲你應該做客戶端和服務器端驗證是安全的。你可以在客戶端進行大量的驗證,但是如果有一些規避了驗證,那麼你就會面臨很大的問題。而在服務器端也進行了驗證,可以保護您免受此類攻擊

1

如果您未在服務器上驗證,有人會使用Firebug覆蓋您的客戶端驗證,或者只是用另一個Firefox擴展完全覆蓋它稱爲海報。祝你好運清理你的數據庫!

客戶端驗證只是爲了讓用戶知道他們立即搞砸了。它並不打算保證任何東西。

3

實際上,服務器端驗證是必須,客戶端很好,但可選。這是因爲你完全不能控制客戶端發生的事情。

更糟糕的情況是構建自定義瀏覽器會使您的客戶端驗證無效。這與使用URL來傳遞敏感信息確實沒有什麼不同 - 對於某人來說,URL很容易做到他們想做的事(例如更改訂單上的定價信息或通過更改用戶ID繞過安全性)。

2

是的,你仍然需要做驗證服務器端。一個AJAX文章仍然只是一個POST。有人可以很容易地寫出一個頁面,用POST數據來處理壞的數據,甚至更容易使用像Firefox中的Tamper Data插件這樣的工具來在Javascript驗證它之後更改數據。

3

服務器端驗證是絕對必要的,因爲用戶可以關閉JavaScript或只是提交他們想要的任何數據到服務器端處理程序,因爲他們不必使用JS增強的表單來提交數據。

我一直認爲客戶端/ JavaScript驗證是UI增強,服務器端驗證是「實際」驗證。擁有JS驗證非常適合即時通知不當數據以幫助用戶。

1

是的,客戶端可能會發生任何事情,您不應該相信它是驗證的主要形式。您不希望不良數據進入數據庫,也不希望由於未檢查的情況而導致潛在的安全問題。它可以取決於功能的類型,但是您應該在雙方都進行驗證。

1

絕對要做到這一點。客戶端驗證適用於簡單類型驗證(例如,它是否匹配正確格式的電子郵件地址),但由於您無法確保您的數據來自您的頁面(表單欺騙是常見的黑客攻擊),您應該始終在服務器端。

此外,服務器端驗證允許您在將數據提交到數據庫之前對數據進行更全面的業務邏輯檢查。

1

雖然此策略適用於合法用戶,但它不會使用某些黑客工具或一系列自動機器人請求發送HTTP POST命令以及滿負荷的垃圾郵件來保護您的網站免受非瀏覽器請求在最好的情況下,只會污染你的系統,造成最嚴重的數據一致性損害,並且會在多個頁面上產生錯誤信息。

14

我一直認爲這是

  • 客戶端驗證是使用性
  • 服務器驗證是爲了安全。
0

客戶端驗證違反了「萬維網」的概念,因爲我們製作html文本的原因是因爲每個設備必須能夠處理rsponce,無論設備的體積小。現在,客戶端驗證要求所使用的設備的處理能力,這不是「www」從使用html的設備所期望的。客戶端驗證對節省帶寬尤爲重要,因爲互聯網速度日益增加,我們不再需要客戶端驗證。