2011-06-15 138 views
1

我關心的是爲安全起見,在瀏覽器中關閉Javascript的客戶端。我的web應用程序嚴重使用jQuery驗證,AJAX等。如何處理客戶端關閉Javascript?

我的同事建議我也在服務器端進行驗證。但是我在客戶端也有一些顯示/隱藏效果,例如,如果複選框被選中,將立即顯示一個隱藏表。我知道設置autopostback = true,我也可以得到同樣的效果。 但是,沒有衝突嗎?

我不知道有多少客戶端瀏覽器不支持Javascript。我的同事也說有人可以修改javascript來繞過驗證。隨着服務器端的會話雲化,這種破解是否可能,這是否有意義?我的web應用程序是.net 3.5項目。我只是不知道如何說服他。任何建議是高度讚賞!

+2

服務器端驗證**總是**比在客戶端進行驗證更安全。任何人都可以關閉Javascript,輸入惡意數據,然後將其提交給服務器而不檢查它。在處理用戶輸入時總是假設最壞的情況。 – Wylie 2011-06-15 20:27:06

+1

黑客不會使用您的表單向您的服務器提交數據。他們會使用他們自己的方法。服務器端驗證是100%必須的。 – 2011-06-15 20:28:18

回答

2

在處理髮布的表單時,您必須始終在服務器上執行驗證。考慮一下 - 我可以製作一個PHP腳本和POST數據到你的服務器上,而不必使用你的表單!你永遠不能依靠JavaScript驗證。

Javascript驗證就像蛋糕上的糖霜。它可以使您的表單更易於理解並且更易於理解。但它不僅僅是蛋糕本身。花一些時間來閱讀「漸進增強」的概念:

http://www.alistapart.com/articles/understandingprogressiveenhancement

http://coding.smashingmagazine.com/2009/04/22/progressive-enhancement-what-it-is-and-how-to-use-it/

對於JavaScript的沉重的Web應用程序,雖然有時漸進增強是不值得的。例如,如果我正在爲特定的內部使用製作基於網絡的支付處理系統。我知道會有Firefox,我知道誰會使用它。如果有人試圖在已知環境之外使用它,我不在乎它不起作用 - 它們不應該被使用。同樣,如果我正在創建一個複雜的基於瀏覽器的圖像編輯Web應用程序,那麼在該應用程序的非JavaScript版本中就沒有任何意義。

您必須評估您的最終產品是否旨在被大部分用戶訪問,或者如果javascript帶來的功能足夠重要且具體,那麼需要使用 javascript才能使用您的應用程序。在這些情況下,請查看noscript標記:https://developer.mozilla.org/en/HTML/Element/noscript

0

這就是爲什麼您應該始終在服務器上執行驗證的原因。如果客戶端禁用JavaScript,那麼您將保證在輸入任何內容之前都會對其進行正確驗證。

0

始終,始終在服務器端驗證。客戶端驗證僅供用戶使用。

但是,關於禁用的JavaScript。如果它對你很重要,那就用純HTML/CSS編寫。在絕大多數Web應用程序中,JavaScript是應用程序邏輯的標準部分。您無需考慮禁用JavaScript的用戶。它根本不是一個選項。

1

你應該一定使用服務器端驗證。如果你知道你在做什麼,那麼很容易繞過客戶端驗證。

對於處理禁用JavaScript的用戶,您可以在您的所有內容上方執行類似於具有lightbox風格窗口的操作,並顯示諸如「請啓用JavaScript」之類的消息,然後在頁面中使用JavaScript刪除Lightbox負載。

但是,現在絕大多數用戶都啓用了JavaScript。

0

由於您提到的問題,您應該始終在服務器上進行驗證;關閉或修改了javascript。

請注意,許多自動回發功能也使用Javascript,但這樣做也無濟於事。你必須決定如何在那裏繼續。可能只是提供一切,並讓服務器篩選出不適合他們選擇的事情。

您可能會使用<noscript>元素來通知用戶相關表單不適用於非JavaScript瀏覽器,並強烈建議他們啓用它。你甚至可以默認隱藏整個表單,只顯示在Ready()函數中,所以它基本上只適用於javascript。 (請記住,您仍然在驗證服務器端的所有內容以解決惡意修改)

0

我的同事還說有人可以修改javascript以繞過驗證。隨着服務器端的會話雲化,這種破解是否可能,這是否有意義?

您正在驗證與會話/驗證混淆。一個與另一個無關。是的,修改(或完全禁用)JavaScript會繞過客戶端驗證。您應該考慮客戶端驗證幫助用戶。它不應該依賴於您的業務邏輯,因爲它可能會被篡改。

因此,服務器端驗證也是必須的。

如果您確實想確保客戶端利用您的客戶端驗證的優勢,請使用'noscript'代碼塊讓他們知道「嘿,JavaScript已禁用。爲了改善用戶體驗,請重新啓用JavaScript「