2009-12-20 95 views
3

我使用Ajax(jQuery)和POST方法來更新數據庫中的數據。我做到以下幾點:POST方法,Ajax和安全性?

  • 獲取從表單數據:USER_ID,entry_id,內容,...
  • 它們發送到將處理數據的URL。
  • 如果數據有效,我們會將它們記錄在我們的數據庫中。

我不知道如何驗證用戶從我的網站發送數據而不是從其他地方發送數據。請幫我解決這個問題。謝謝 !

回答

5

您正試圖抵禦CSRF攻擊。

標準防禦措施是在POST中有一個require從另一個AJAX請求中獲取一個標記。由於瀏覽器的跨域防禦功能,您的域外的Javascript將無法獲得令牌。

+0

他們可以運行bot來獲取令牌。所以我認爲最好的辦法就是包括cookie,除此之外,如果你不想要這個攻擊,那就去找一個驗證碼。 – DucDigital 2010-02-06 15:08:06

+3

@DucDigital:你在說什麼? – SLaks 2010-02-07 00:11:02

1

有幾個問題在這裏:用戶

  1. 身份驗證和授權是誰做的操作
  2. 防護CSRF。

決定你需要做什麼。第一個應該可以通過cookies,HTTP認證(瀏覽器針對AJAX請求發送)或者一些自定義方法(例如包含認證的額外參數)來處理。

CSRF是一個不同的問題,但您可以很輕鬆地通過確保請求確實通過AJAX進入,而不是通過正常的表單進行迴避。這應該可以通過添加一個額外的頭來實現,這個額外的頭不能通過製作HTTP表單來添加(注意:並非所有的頭都可以通過Javascript添加,嘗試使用X-Header)。

另一種可能是首先不使用表單編碼的文章;如果您希望正文中包含JSON對象,則該對象不能來自其他站點,因爲瀏覽器不會通過HTTP POST正常發送它。

+1

爲你的開場+1,最後兩段爲-1:你需要抵禦基於HTTP的攻擊,但不一定基於瀏覽器。我們不能假設任何理論攻擊者只會使用瀏覽器。舉例來說,鏈接垃圾郵件發送者比這更先進。 – 2009-12-20 15:56:01

+0

跨網站請求僞造是您的合法用戶被欺騙使用他們自己的瀏覽器(以其身份驗證和cookie)進行非預期請求的地方。使用基於非形式的POST或自定義標頭可以避免這種特定的攻擊。 – MarkR 2009-12-20 22:01:26