使用ImageResizer结合安全提供图像

时间:2012-08-05 15:38:02

标签: authorization asp.net-mvc-4 imageresizer

[这是关于之前与计算机语言学家讨论的后续/清理问题,希望我已经指定了这个] ImageResizer可以抓取站点根目录之外的文件并为其提供服务(从而避免在网上提供未经修改的原件)吗? 或者这种情况的最佳做法是什么?

*如果原件存储在站点根目录之外,则会在线存储基于大小调整大小的图像(通过url auth / httpmodule等保护)然后让Imageresizer根据该图像动态调整大小等等吗?据我所见,我还没有找到一种方法来限制访问100%的文件夹,除非通过imageresizer请求。如果ImageResizer可以调整大小,用户可以访问它似乎更柔和。

*或者也许是一个解决方案,控制器提供原始图像,然后由ImageResizer处理。

主要目的:

  1. 能够完全自定义权限规则

  2. 能够以安全的方式提供服务(至少我学会了未经改动的用户上传的图像,不应该直接在siteroot下访问)。保留原件似乎是一种面向未来的战略。

  3. 能够动态调整ImageResizer的大小。

  4. 关于其他人如何实现这一点的任何意见也受到赞赏。

1 个答案:

答案 0 :(得分:1)

  1. 在站点根目录之外找到文件并不能完成任何事情。您仍然需要将它们作为虚拟文件夹挂载,以便再次访问它们。
  2. MVC是以这样一种方式编写的,它在这里绝对没用 - 它会拖延,直到ProcessRequest做任何事情。
  3. ImageResizer与这个问题完全无关 - 它的行为就像StaticFileHandler一样 - 你需要一个通用的授权系统。
  4. ASP.NET URL Authorization听起来可能不够复杂,无法达到您想要的复杂程度。
  5. 要完成自定义授权逻辑,您需要处理HTTP管道中的AuthorizeRequest事件,并从头开始实现路径解析逻辑。您可以在Global.asax.cs中处理事件或通过实现IHttpModule来处理事件。

    在AuthorizeRequest中,您可以在ImageResizer或任何其他HttpModule或HttpHandler看到它之前访问传入路径和查询字符串数据,决定用户今天是否应该能够访问它,并让请求继续或抛出HTTP 401错误。

    我建议使用ILSpy查看System.Web.Security中的UrlAuthorizationModule。它只有几页代码,非常简单。