2013-01-10 47 views
1

我在使Ajax請求安全時面臨困難。 問題是數據被篡改。我已經閱讀過這個問題,並且建議不要信任來自客戶端的信息。它可以很好地使用提琴手或任何這樣的工具進行更改。我們還需要在服務器端進行驗證。但我的問題是如何驗證。爲Ajax調用實現安全

我們來看一個例子。 假設我在數據庫中有員工信息,並且公開了一個方法GetEmployeeDetailByEmployeeId。在任何員工提出此請求之前,他將使用userId和密碼進行身份驗證,並授權此類型的用戶是否被允許提出此請求。

但是,如果一個員工給某個其他員工的employeeId,他實際上會得到他不應該看到的數據。爲了解決這個問題,我們有兩個解決方案 1.我們應該檢查對數據庫的請求,不管這個人請求的信息是否適合他或他是該人的經理 2.我們應該以某種方式驗證應用層本身我們是否應該拒絕接聽電話。

第一種方法是性能密集型,我必須提出數據庫請求並找到記錄的關聯,這也會增加開發成本。

請提出走哪條路,我們是否有更好的解決方案來解決這類問題。

+0

如果從數據庫讀取更新員工記錄太昂貴,那麼您可能需要更好的數據庫或緩存方案。您需要在後端完成任務,作爲業務規則檢查,並且沒有可讓您在沒有數據的情況下做出決定的靈丹妙藥。請解釋爲什麼從數據庫中讀取是一個問題? – Enno

回答

1

顯然你需要在你的後端檢查它,否則你的應用程序可能會被一個孩子利用。

更新

你需要實現在後端授權機制,你在開始時加載的權限在此之後,你可以將它添加到用戶會話,這樣你就不需要每次查找數據庫時,您只需檢查用戶對所需任務權限的許可。

要實現身份驗證機制:目標,user可以看到它的自己的空間,但supervisor可以在他department內看到大家。

  • user A已經加載在會議上user_id,讓說user_id = 123
  • user A只能請求他的信息,以便if (user_id == req_user_id)然後顯示信息,否則顯示錯誤。
  • user B的許可值爲100,那麼我們就叫他supervisor吧。現在if (user_id == req_profile_id)不是true我們會檢查權限。假設這個特定任務的任務權限爲10,所以if (user_perm >= task_perm),請繼續並檢查部門,如果請求的用戶和當前用戶都在同一個部門,則顯示信息,否則顯示錯誤。

這應該基於您的信息。

+0

這是真的,但爲了添加檢查每個操作,我需要讀取非常昂貴的數據庫。有一段時間,協會可能不是直接的,我也需要加入幾張桌子。如果我們有一些選項來驗證請求是否是真實的並且源自正確的來源,該怎麼辦?類似哈希或一些數字簽名的東西.. – Gaurav

+0

@Gaurav在任何情況下,你需要再次檢查出來,用戶可能是一個值得信賴的用戶,但有人可以代表該攻擊... – 2013-01-10 11:23:43

+0

權限不是在這種情況下足夠了。說,我會像EmployeeDetailInfoViewPermission許可。如果一名惡意員工通過其他員工,他會得到這些數據。他將獲得該許可。我正在尋找一些不會損害性能的解決方案,並且實施起來也更容易。 – Gaurav