2011-06-14 47 views
2

我正在構建一個使用GWT的Web應用程序,並使用一個簡單的java類來執行客戶端中的文本框和其他字段的驗證。我不確定用戶可以繞過這些驗證運行該代碼。請告訴我我可以在窗體中進行驗證的最安全的方式。GWT中的客戶端驗證漏洞

回答

4

通常,您需要在客戶端和服務器上驗證均爲:在客戶端可以立即反饋給用戶(方便,可選),並在服務器上進行安全性(必須!)。

與在客戶端使用jQuery或類似的應用程序以及服務器端的不同語言相比,使用GWT獲得的優勢在於,您可能能夠爲客戶端和服務器重複使用相同的驗證代碼驗證。

+0

+1還應該注意的是,進行客戶端驗證的主要原因是爲了減少對服務器的不必要的調用。 – helpermethod 2011-06-14 09:11:05

+0

我有一個疑問,當方法被調用到服務器的調用是通過java代碼完成的,並且將java代碼轉換爲GWT中的javascript,那麼應該如何修改javascriptcode並調用服務器進行驗證的語句是在這種情況下,爲了安全起見應該做什麼。 – 2011-06-14 10:13:23

+1

@Adedeep:用戶只能修改客戶端代碼。更好:想象一下,用戶可以絕對*發送他們想要的任何* HTTP請求(例如,嘗試Firefox插件[Poster](https://addons.mozilla)。org/de/firefox/addon/poster /) - 他們甚至不必使用GWT應用程序與服務器進行交互!這就是爲什麼所有安全檢查都必須在服務器端執行的原因。 – 2011-06-14 10:20:05

3

瀏覽器中的JavaScript可能被黑客入侵/繞過,因此沒有安全的方法來做到這一點。你不應該依賴於JavaScript來執行任何安全相關的功能。

您必須在服務器上進行安全檢查,以確保您的應用程序安全。

+0

感謝彼得...我會記住這一點。 – 2011-06-14 07:21:55

0

這裏是我的客戶的觀點VS服務器驗證很短的博客文章:

http://ashtoncthomas.blogspot.com/2011/03/gwt-validation-on-client-server.html

有幾個方面,你可以驗證和一些平衡,例如客戶端和服務器之間共享代碼。

你確認你創建DTO的之前或之後(如果你那麼做後,你可以分享一些代碼,但你不能信任的輸入)

我建立了一個自定義的驗證框架,可以很容易地捆綁驗證在客戶端和服務器上,但每種情況都不一樣,所以我建議找到適用於大多數項目或至少適用於當前項目的東西。

0

自2006年以來,已經承諾適當的客戶端驗證! http://code.google.com/p/google-web-toolkit/issues/detail?id=343 我對此並不屏氣。

我已經從脆弱的自制客戶端驗證轉移到往返驗證,在此驗證您提交持久請求的實體處於無效狀態。如果你有一個運行服務器端的驗證器,RequestFactory會向你發送Set in Receiver.onViolation()。

這對我來說意味着更少的代碼,代價是接收驗證結果的客戶端的延遲很小。它仍然比純HTML表單快得多。

看看在驗證實體: http://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html