2009-07-29 67 views
1

我有一個安全的Web應用程序,並將用戶詳細信息存儲在會話對象中。我正在構建Silverlight控件以查看存儲在數據庫中的圖像,並且需要保護這些圖像的訪問權限。我不是想阻止複製或類似的東西,但我需要確保訪問該圖像的用戶實際上有權查看可通過檢查會話中的用戶數據來實現的圖像。在Web應用程序中保護Silverlight圖像查看器的最佳方法?

所以我的想法就是要做到以下幾點:具有主機Silverlight控件

  1. Web應用程序。
  2. 一個ashx文件,用於處理從數據庫中提供的圖像。
  3. 通過silverlight控件訪問ashx文件將檢查會話以確保他們確實可以訪問此圖像。 (我假設silverlight控件和web應用程序共享相同的會話,這可能是一個錯誤的假設。)

此設置是否正確或者有其他方法來處理?這將是我第一次將Silverlight控件集成到Web應用程序中。

回答

0

Silverlight控件生活在瀏覽器的上下文中。我認爲如果你是silverlight控制callse你的ashx頁面,那麼ashx頁面會在你的web應用程序運行的同一個會話下執行。

當用戶登錄到您的Web應用程序時,在會話中存儲某些內容以指示它們已通過身份驗證,並在您的ashx頁面中進行檢查。

這是一個簡單的場景模擬和測試。

0

聽起來像要確保沒有人嗅探流量來確定您的路徑的URL。也許你不希望這個URL獨立於你的頁面,或者用戶/調用者不應該看到的其他圖像。

您是否考慮過爲客戶端留下cookie值?也許,這樣的場景:

  • 當你的客戶訪問的頁面,這聽起來像你想的圖像加載到Silverlight控件。在您處理頁面上的其他數據時,請將cookie值發送回瀏覽器。

  • 基於瀏覽器/調用者和所請求的圖像,在Cookie中放置醃製/散列值。

  • 假設圖像是someImage.png,客戶端的IP地址是10.10.10.10。使用一些鹽像圖像的數據庫標識符,以確保圖像之間的唯一性。我們假設它有ID 509.

  • 通過單向加密方法(即AES)使用您保守祕密的強密鑰運行字符串「509_someImage.png_10.10.10.10」。讓我們假裝你的結果是'biglongcrazyrandomstring123',但它顯然會更長。

  • 對查詢字符串調用image.ashx頁面,強制包含該值(即image.ashx?img=someImage.png&key=biglongcrazyrandomstring123)。

  • 在服務器端,您轉到您的數據庫並檢索someImage.png的ID。通過相同的加密算法運行請求者的IP地址,圖像文件名和數據庫ID。將THAT值與查詢字符串中發送的值進行比較。如果它們匹配,那麼你知道你把這個字符串放在它們的cookie中。相反,你合理地知道他們不可能猜到它。

  • 如果有人試圖混淆查詢字符串值,則每次都會失敗,因爲您正在比較兩個生成的值。

相關問題