0

我想知道我正在做的是否是一个好习惯。请指教。谢谢。

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

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

如何避免此类非法访问?还是有更好的做法来实现这种网络缓存?

谢谢!京叶

4

1 回答 1

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 用作标识符而不是用户名,但在这种情况下,只要会话超时,缓存的数据就会变得不可访问。

于 2013-06-20T12:20:09.653 回答