2015-07-13 76 views
2

在一個MVC應用程序中,我有一個兩頁的過程。在第一頁上我們收集的信息將允許我們確定要更新哪個數據庫記錄。在第二頁上,我們收集用於更新此記錄的新值。爲了這個工作,我們需要一種方法來在兩個頁面之間保持信息,包括一些記錄ID。如何在ASP.NET MVC中存儲「每個瀏覽器選項卡」的信息?

我雖然有兩種方式來做到這一點,都有一些問題。

  1. 將信息存儲在Session對象中。

    只要用戶沒有打開第二個瀏覽器窗口或選項卡,它就會工作。如果他這樣做,他有可能將修改應用於錯誤的記錄。假設他打開標籤1並完成第一步。記錄ID 1存儲在Session對象中。用戶然後打開標籤2並完成第一步。 Record id 2然後存儲在Session對象覆蓋記錄id 1中。然後用戶回到第一個選項卡並完成第二步,認爲他正在編輯記錄1,但實際上他將編輯記錄2。

  2. 將信息存儲在頁面的隱藏字段中。

    這樣可以解決問題1的解決方案,但對於惡意用戶來說,更改記錄標識以覆蓋任何記錄是微不足道的。

雖然輸入這個問題,但我只是第三個解決方案。這是兩個論文的混合體,但我不確定它是否完全安全。我們可以在頁面的隱藏字段中存儲一個隨機ID,並用它來爲我們用於訪問會話對象中的數據的密鑰添加前綴。我認爲這會奏效。解決方案2可以利用這個嗎?

安全地存儲「每個選項卡」數據而不是「每個會話」數據的其他好方法是什麼?

回答

0

如果你想分開不同標籤中的信息,你應該使用sessionStorage,每個打開的瀏覽器標籤都有所不同。

您可以設置它是這樣的:

sessionStorage.setItem("perTabValue", "true"); 

然後你就可以得到你的價值:

var x = sessionStorage.getItem("perTabValue"); 
if(x === "yourValue"){ 
    //do anithing you want 
} 
+0

我想我需要的信息存儲在服務器端,所以用戶不能忍受它。 –

+0

我gess唯一的方法是通過ajax發送到服務器。 [這裏是很好的深度答案](http://stackoverflow.com/a/16796744/1849444)。 –

1

考慮您可以檢查安全服務器端方法2。如果用戶對特定記錄沒有修改權限,則服務器不得保存它。否則,他/她正在修改對其具有修改權限的記錄,並且無論他/她是通過標準用戶界面還是黑客入侵都無關緊要。

1

我認爲你在混合兩件事 - 授權和傳遞數據。

如果用戶被授權使用「其他記錄」進行操作,如果他「調整隱藏」並不重要,因爲他有權更改另一條記錄。沒有人會故意這樣做。手段 - 您只需要檢查用戶是否有權在用戶的每篇文章中做任何事情,即在每種控制器方法中(這是常規驗證,以始終驗證所有用戶輸入服務器端)。

我建議你去「隱藏領域」。

相關問題