【问题标题】:asp.net secure images against static requests from other users?asp.net 对来自其他用户的静态请求的安全图像?
【发布时间】:2009-02-25 13:07:00
【问题描述】:

我在一个为每个特定用户生成动态图像的网站上工作。有时这些图像包含对非常敏感数据的描述。最近我们开始看到对属于不同用户的图像的请求以

的形式出现

http://myapp/images/someuid/image1.jpg

显然,有人发现如果他们创建了正确的 URL,他们可以访问其他用户的图像。我们将图像存储到文件系统以帮助减少带宽。

  • 我们如何保护它 - 某种 http 处理程序?

  • 有没有一种方法可以提供图像以利用 -f 缓存,而不必将其写入文件系统并让 IIS 完成这些脏活?

【问题讨论】:

    标签: asp.net security image


    【解决方案1】:

    使用 .ashx:-

    TimeSpan maxAge = new TimeSpan(0, 15, 0); //!5 minute lifetiem.
    
    context.Response.ContentType = "image/gif";
    context.Response.Cache.SetCacheability(HttpCacheability.Private);
    context.Response.Cache.SetExpires(DateTime.UtcNow.Add(maxAge));
    context.Response.Cache.SetMaxAge(maxAge);
    context.Response.Cache.SetLastModified(lastModified); // last modified date time of file
    context.Response.WriteFile(filenameofGif);
    

    您可以包含您需要的任何代码检查,以确保正确的用户正在访问图像。

    【讨论】:

    • 还在 iis 中对 images 文件夹禁用读取访问权限,以防止直接请求绕过 asp.net ashx 处理程序...
    • 是的。就我个人而言,我什至没有 webroot 下的图像文件夹,但取决于主机,这可能不是一个选项。
    【解决方案2】:

    我认为最好的选择是拒绝直接访问来自网络的图像并创建一个 aspx 来检查用户权限并返回正确的图像。

    【讨论】:

      【解决方案3】:

      如果图像对特定用户是私有的,那么您应该将它们存储在主应用程序文件夹之外,或者将 web.config 放在每个图像文件夹中(如 someuid)和限制配置文件中的访问 - 要么删除所有人(deny="*"),要么只允许特定用户访问(allow="john")。

      在这两种情况下,您都可以使用处理程序将图像流式传输给用户,但至少您现在可以检查权限。如果请求用户没有权限,则向他抛出 401,甚至显示另一张图片,如 imagenotfound.gif。

      但是,我担心处理程序会产生大量流量,因为每张图片都会调用一次,我不知道您为每个用户显示多少张图片。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-31
        • 1970-01-01
        • 2011-09-28
        • 2020-12-20
        • 2020-05-30
        相关资源
        最近更新 更多