2013-06-20 119 views
1

我想知道我在做什麼是一個好習慣。請指教。謝謝。Web服務器基於會話的緩存安全問題?

我的Web應用程序服務器爲用戶緩存生成的圖表圖像以提高性能。 圖像存儲在基於會話的文件夾中,其中生成文件夾名稱。 假設user1繪製圖表並緩存在服務器上: webapp \ sessionFolder \ aklfq13d10jd10 \ image.jpg

我禁用了IIS7目錄瀏覽功能。 但我發現系統的其他用戶也可以訪問該圖像,如果他們輸入完整的網址。但他們不應該看到它爲user1緩存。

如何避免此類非法訪問?或者有更好的做法來實現這種網頁緩存?

謝謝! Kyeo

回答

1

更好的方法是將圖像緩存到客戶端無法訪問的目錄中(例如,App_Data的子目錄),然後有一個處理程序將文件內容從此目錄流式傳輸到授權用戶。

如果這些文件是特定於用戶,例如,你可以存儲在與用戶名導出文件夾名稱圖像:

App_Data\TempImages\User1 
App_Data\TempImages\User2 

然後以流媒體形式的內容將只流文件爲當前登錄的處理程序用戶,像(模數位的錯誤處理):

string path = Path.Combine(
      AppDomain.CurrentDomain.BaseDirectory, 
      "App_Data\TempImages", 
      HttpContext.Current.User.Identity.Name, 
      Request.QueryString["imageFileName"]); 

... stream image at path if it exists ... 

你可以使用的sessionId作爲標識符,而不是用戶名,但在這種情況下,高速緩存的數據都將無法使用,只要會話超時。

+0

謝謝@Joe。你有閱讀這種方法的參考嗎?我想詳細瞭解實施細節。你能分享他們嗎? –

+0

@ Kyeo1983 - 鏈接的文章有關於創建處理程序來傳輸圖像的信息。它從數據庫獲取圖像:在你的情況下,你將從磁盤上的文件讀取它:http://www.hanselman.com/blog/GettingSessionStateInHttpHandlersASHXFiles.aspx – Joe