2010-06-22 84 views
5

剛纔我正在寫一個項目,並且我打算用jqueryajax的請求編寫它。AJAX請求的安全

唯一的事情,我不知道,它足夠安全嗎?

例如,當我驗證用戶名,登記新用戶時,使用jQuery AJAX請求,

我得到現有用戶名的陣列從分貝(使用JSON),然後驗證,如果new_username不​​現有的username s,我提出另一個請求,並註冊用戶。

但是安全呢? meybe黑客可以找到方法來改變我的一些if-else聲明,並且整個我的securite會剎車。

也許你會幫我理解這種情況?

感謝

+1

非常感謝有趣的討論。也許你知道更改客戶端腳本的方法?有沒有一個工具呢? – Simon 2010-06-22 17:08:33

回答

6

你爲什麼要實施該客戶端的任何

您應該通過HTTPS在AJAX查詢中發送用戶名/密碼,並讓服務器僅響應用戶所需的數據,而不是整個用戶名單。

即使把安全放在一邊,如果你有數百萬用戶呢?你將把這個列表發送給所有的客戶端以供他們登錄?

+0

即使使用HTTPS,我也不會將整個列表發送給用戶;如果訪問者可以查看該列表(使用任何工具),他們可以看到誰在您的網站上註冊。而且,不要單純依靠客戶端驗證;很容易繞過JavaScript。 – 2010-06-22 16:47:22

+0

這只是一個例子,我只是試圖從安全的角度來理解jquery的工作(對於英語錯誤,抱歉) – Simon 2010-06-22 16:47:52

+2

請記住,您在客戶端上做的任何事情都可以被用戶修改和查看。無論何時您需要執行安全操作,您都需要驗證服務器。 – 2010-06-22 16:53:48

12

(在我認爲,該username是,用戶可以登錄ID,而不是某種暱稱以下;))

  1. 讓所有的用戶名作爲JSON是壞。然後攻擊者立即獲取所有註冊用戶名
    只需將用戶名發送到服務器,在那裏驗證併發送「有效」或「無效」作爲響應。即,檢查服務器端的可用性。

  2. 總是驗證服務器端的用戶輸入。 JavaScript可以被禁用。

更新:

不要緊的jQuery是否參與與否。您發送給客戶端一切(而不是散列加密可以由客戶端讀取,沒關係它是否是一個XMLHttpRequest或「正常」的要求。

你會發送一個包含所有用戶名的HTML表格給你網站的任何訪問者嗎?我希望不會:)


摘要:

  • 僅發送數據,客戶端被允許訪問。
  • 驗證服務器端的用戶輸入。
  • 絕不信任用戶輸入。
+2

對於HTML表格+1! :D – 2010-06-22 16:51:43

+0

不,我發送它作爲一個列表,而不是表格:D – Simon 2010-06-22 16:53:37

+0

順便說一句,我知道很多網站發送所有用戶名到訪問者;它在很多論壇上都被稱爲「成員名單」。 [即使是SO](http://stackoverflow.com/users);-) – 2010-06-22 16:55:41

2

如果可能的話,安全性就是服務器端最好的做法之一。我的典型AJAX登錄方法是將用戶名和MD5或SHA1哈希密碼發送到服務器上的一個方法,然後該方法將處理所有登錄詳細信息。該實現的細節將取決於您的服務器端技術,但大多數Web應用程序框架都有相應的功能。甚至可能會有一些解決方案包含Javascript庫來處理客戶端工作。

5

Ajax不是服務器端代碼的替代品。雖然可以使用ajax實現登錄和註冊功能,但您仍然需要在服務器上驗證和存儲數據。

一個更加理智的實現方法就是簡單地向服務器發送https請求,其中包含服務器以yay或nay響應的用戶名和密碼。

+0

Ajax不是服務器端代碼的替代品<<< THIS !!! – Incognito 2010-06-23 15:51:56