2016-02-20 70 views
0

我正在ASP.NET MVC上開發一個Web應用程序,我正在使用ViewBag和TempData來存儲一些值,直到用戶註銷才能存活。即:用戶登錄的是哪些內部ID,以便我可以檢查角色以及用戶不應該知道的其他值。ASP.NET MVC ViewBag/TempData安全

我的問題是:

  1. 是ViewBag/TempData的好此用途?我是否正確使用或者 錯誤?
  2. 這些工具是否安全?用戶可以嗅一下這個值 嗎?

感謝您的回答。

+0

爲什麼混合ViewBag和tempdata?對於不同的用途他們是不同的東西。你應該發表一個你正在做的事情的例子。順便說一下,它們都不適用於存儲必須存在多個http請求的數據 – tede24

+0

爲了檢查用戶角色的目的,您可以使用MVC基於角色的**授權**,例如'[Authorize(Roles =「Administrator」)) ]'....你的查詢(2):**是**,它們是安全的......但不是爲了長時間儲存​​東西的目的。對於這種持續時間,開發人員大多使用'Session',這也是安全的 –

回答

2

TempData只保留到下一頁訪問; ViewBag用於將值從控制器傳遞到視圖。兩者都不適合存儲會話持續的信息。在安全性方面,它們都是服務器端,用戶不會意識到它們,因此,它們是安全的。

如果您想要在會話期間保留值,則需要不同的機制。有幾種可供您使用。我最喜歡的是使用會話變量,但一些開發人員堅決反對會話變量。你需要進一步研究你的選擇。

1

您應該將基於會話的數據存儲在會話中。

ViewBag存在View中需要的附帶數據。頁面標題,這樣的事情。對於視圖中需要的其他數據,您應該使用該模型。

TempData用於下一個操作所需的附帶數據。它可以存儲服務器 - 客戶機 - 服務器之間的往返數據;之後,除非你專門讓它堅持下去,否則它會被刪除。

這些都不會暴露數據是一種安全風險,除非您足夠愚蠢地將安全數據發送到客戶端。

0

爲基於授權[Authorize(Roles = "Administrator")] ....檢查用戶的可以使用MVC的角色作用的目的,你對你的查詢(2):,他們是安全的......但不是你的目的長時間儲存​​東西。對於這種持續時間,開發人員大多使用Session,這也是安全的