2017-04-25 143 views
0

一個人可以來創建一個帳戶。 我在客戶端實現了一個很好的驗證,例如,如果他沒有提供有效的電子郵件地址,我會馬上通知他,這是不合法的電子郵件(帶有客戶端JavaScript)。我應該像客戶端驗證一樣在服務器端重複客戶端的表單驗證嗎?

但是攻擊者很容易繞過客戶端驗證。所以我也在服務器端使用了相同的驗證。但區別在於用戶體驗。例如,如果客戶端的JavaScript被禁用,並且用戶提供了無效的電子郵件,那麼應用程序會告訴他錯誤(表單提交併刷新頁面後)。沒有更多信息。 (因爲我認爲他是攻擊者,所以我的網站應該對攻擊者有非常糟糕的用戶體驗)。

現在我的問題是:如果我這樣做,我的網站的用戶體驗會好嗎? (在客戶端向用戶報告錯誤,但在服務器端很糟糕,服務器端在提交完整驗證失敗後返回'錯誤')。

更多的解釋:

每當用戶類型無效文本輸入,應用程序會告訴他就在與他已經沒有輸入有效的文本紅色文字輸入的底部。 (這會因客戶端JavaScript而發生)。

但是,如果某種方式客戶端JavaScript已被禁用,並且用戶輸入無效文本到輸入中,服務器端將在頁面提交後返回'錯誤'給用戶。

回答

1

因爲您已經在進行服務器端驗證,所以問題的關鍵是您是否仍然爲不通過任何原因獲得客戶端驗證的用戶提供可比較的用戶體驗,這取決於您。

我不認爲這是100%安全的假設每個人與JavaScript禁用是不合格的,但沒有JavaScript的合法用戶的百分比可能足夠小,你不需要投資提供爲他們提供相同級別的用戶體驗。 This Q&A on ux.stackexchange.com可能會提供一些見解。 (這有點舊,但我認爲它的觀點仍然有效。)

一個合理的妥協可能是在通用錯誤中添加一個<noscript>標記,並顯示一條消息告訴他們他們將不會看到JS的詳細錯誤禁用。

5

從來沒有依靠客戶端驗證。它可以輕鬆繞過。 總是在服務器端驗證。客戶端驗證非常有用,因爲它提供了即時反饋,從而提供更好的用戶體驗。但唯一可以依賴的驗證是用戶不能破壞的,這意味着它必須駐留在服務器上(或者不在客戶端的瀏覽器/設備中的任何位置)。

+0

是的,這正是我所做的。但是,服務器端應該返回關於問題出在哪裏的良好信息?或者只是像'錯誤'這樣的消息在每個失敗的表單驗證中都可以正常工作?因爲我認爲他是攻擊者,所以用戶體驗越差越好。請閱讀更多解釋。 – Joseph

+0

國際海事組織,如果用戶正在顛覆你的客戶端驗證我不在乎,如果他們得到好消息,因爲他們試圖打破反正。 – gforce301

+0

那麼黑客和惡意用戶會在客戶端禁用javascript嗎?做普通用戶禁用,所以我需要在服務器端的高用戶體驗錯誤報告系統,以防止客戶端JavaScript被禁用? – Joseph