2014-04-09 64 views
1

我們正在使用Asp.net MVC和AngularJS。我們希望將用戶的ID放在頁面上的某些靜態數據中。別擔心,我們使用[Authorize]屬性保證了所有MVC API控制器的安全。然而,將用戶的ID放在頁面上確實是一種風險有人問我,我真的不明白爲什麼不,但我仍然認爲這不是一個好主意。在頁面上放置用戶ID是否存在安全風險?

+1

通常情況下,我用的GUID而不是整數的時候我必須使用用戶ID在公共場所(URL,回傳值,...) –

+2

這取決於你與該用戶ID做什麼。你是否直接使用它在數據庫上做些什麼?那麼是的,這是不安全的,因爲惡意認證的客戶端可能會發布不同的用戶ID(以查看其他人的數據?以別人的名字發佈信息?)。這就是說,如果您從當前登錄用戶計算該用戶標識,那麼您並不需要從客戶端獲取該用戶標識。如果它更復雜一點,你至少應該對當前登錄的用戶進行驗證。 –

回答

1

這不是一個安全風險,知道用戶的ID不應該足以獲得任何機密信息。爲了獲得這些信息,你必須確保用戶已經過認證,例如使用授權屬性並在服務器端檢查是否允許登錄用戶執行當前操作。

0

在頁面上爲客戶端保留普通用戶標識可能會導致劫持風險。您需要授權所有請求才能執行此操作,並且他是這樣做的人員。例如,我有一個配置文件頁面,現在我在頁面中更改了我的用戶標識並更新了名字,您的代碼將無法捕獲此劫持,因爲已獲得授權,他可以更新配置文件。如果你想保留這個ID,請始終生成GUID,並將其保存在服務器端,並將其映射到用戶ID和GUID。每次用戶登錄時都可以生成GUID。它會避免GUID劫持,因爲它一直在改變。

您可以在數據庫中保留此映射以實現持久性,並將其保存在靜態變量或緩存中以字典形式快速從GUID映射到用戶標識。

 Dictionary<string,int> mapping = new Dictionary<string,int>; 
相關問題