2009-08-15 81 views
1

假設ASP.NET MVC應用程序具有受保護的成員區域。生成的一些URL包含敏感數據,例如Accounts/123,123是敏感數據,例如帳號。如果用戶機器後來受到攻擊,攻擊者無法訪問Accounts/123,因爲這會受到保護,但他們只是通過查看其瀏覽器歷史記錄來獲得用戶帳號。我能看到的避免這種情況的唯一方法就是不使用URL中的敏感數據,即使在受保護的區域也是如此。URL中的敏感數據的ASP.NET MVC保護成員區域

我在考慮scenerios,其中敏感數據是用於索引,細節,編輯的ID。解決方案可能是向表中添加另一個表示敏感數據的字段,這意味着如果受到威脅,在URL中使用。

或者還有另外一種方法嗎?

回答

7

我會說不使用URL中的敏感數據,並保持帳號存儲在用戶會話(如果假設多個帳號,只保留當前)。

編輯


看到您的編輯後:

如果你真的想要,而不必通過頁面的URL任何想法採取此方案考慮到客戶機的安全方法來此。

  • 用戶具有
  • 帳戶在頁面上列出了多個帳戶
  • 「ID」使用當前會話ID加密的賬戶
  • 鏈接的用戶點擊,並帶他到鏈接/帳戶/ 10912ljlkj2308s

現在您的帳戶ID不再可見,並且加密密鑰僅適用於該會話和該ID。授予的會話ID可能並不總是唯一的,但這對於歷史/緩存中的「查看者」是一個巨大的威懾。

+0

我更新了我的問題,使之更清楚一點 – Danny 2009-08-15 17:32:55

+0

你會如何加密,解密的ID? – Danny 2009-08-16 18:29:48

+0

任何加密都會真正起作用 – 2009-08-17 15:37:44

0

不要使用HTTP GET來請求敏感數據。改用HTTP POST。把你的ActionResult上的[AcceptVerbs(HttpVerbs.Post)]確定下來。

在類似的說明中,請不要使用HTTP GET來獲取您將用於AJAX請求的數據,這裏有subtle JSON vulnerability

+0

我更新了我的問題,使其更清晰 – Danny 2009-08-15 17:33:30

0

我有一個類似的問題...仍然想着最好的解決方案......但實施了湯姆的解決方案。一個側面的問題是該網址必須對mvc「友好」。 HtmlEncode不起作用,因爲它允許/。 Base64編碼適用於以下輔助方法:

public static string Base64ToUrlFriendlyBase64(string value) 
{ 
    return value.Replace("/", "_").Replace("+", "-"); 
} 

public static string UrlFriendlyBase64ToBase64(string value) 
{ 
    return value.Replace("_", "/").Replace("-", "+"); 
}