2010-07-22 48 views
1

我正在構建一個ASP.NET MVC 2網站,我目前正在實施一個OpenID註冊表單。不幸的是,我正在預測我的架構中可能存在的安全漏洞/漏洞。在視圖和控制器之間傳遞ViewModel中的信息ASP.NET MVC 2網站,而不允許修改信息

以下是我想OpenID登錄工作:

  1. 用戶請求/帳號/登錄,控制器發回OpenIDLogin查看。
  2. 用戶將OpenID輸入到View中,然後進行OpenID授權,最後將OpenID返回給Controller。
  3. 控制器檢查OpenID當前是否被系統中的用戶使用。如果是,用戶登錄到該帳戶。否則,註冊過程開始。

而現在,OpenID的註冊過程:

  1. 的OpenID標識符,以及由OpenID提供商提供的任何其他信息(如電子郵件地址或名稱),投入我的自定義視圖模型併發送到我的OpenIDRegistrationForm視圖。
  2. RegistrationForm視圖將OpenID存儲在隱藏字段中以確保將其發送回控制器。
  3. 用戶填寫RegistrationForm視圖並將其發送回控制器。
  4. 控制器創建用戶帳戶並將OpenID放入數據庫。

我在我的架構中看到的錯誤是,用戶可以修改RegistrationForm視圖中的隱藏值。因此,他們可以用欺騙他們的OpenID

我將確保向最終註冊控制器操作添加另一輪檢查,以確保所提供的OpenID不存在,但仍存在欺騙的可能性。

我的架構可以改進莫名其妙嗎?我不希望這個結果嚴重...

我正在考慮的一個解決方案是在將它發送到View之前對OpenID進行加密,然後在它到達控制器時將其解密。我應該試試這個嗎?

感謝您的幫助提前。

回答

1

hmm .... 好的。 「正確」的解決方案是,提供像http://startersts.codeplex.com/

匿名用戶開放ID令牌的IDP和一個商店,直到他完全驗證。

簡單的解決方法是,給他一種sessionid,並將其存儲在服務器端。

一個更簡單的解決方案就是加密openid,所以用戶不能改變它。

+0

我想我只是要加密它。我應該使用什麼加密?你有什麼樣的代碼嗎? – 2010-07-22 20:44:12

+0

只是搜索stackoverflow。有很多加密技術......從非常簡單(但可以破解)到非常複雜。 http://stackoverflow.com/questions/2246319/c-simple-encryption – cRichter 2010-07-23 09:14:47

相關問題