基于Web服务器会话的缓存安全问题?

时间:2013-06-20 12:06:56

标签: caching iis-7

我想知道我在做什么是一种好习惯。请指教。感谢。

我的Web应用程序服务器为用户缓存生成的图表图像以提高性能。 图像存储在基于会话的文件夹中,其中生成文件夹名称。 假设user1绘制了一个图表并在此处缓存在服务器上:     web应用\ sessionFolder \ aklfq13d10jd10 \ image.jpg的

我禁用了IIS7目录浏览。 但我发现系统的其他用户也可以访问图像,如果他们输入完整的URL。但他们不应该看到它,因为它是为user1缓存的。

如何避免此类非法访问?或者是否有更好的做法来实施此类网络缓存?

谢谢! Kyeo

1 个答案:

答案 0 :(得分:0)

更好的方法是将图像缓存在客户端无法访问的目录中(例如,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用作标识符而不是用户名,但在这种情况下,只要会话超时,缓存的数据就会无法访问。