如何防止在ASP.NET MVC中直接访问图像?

时间:2013-04-01 15:13:11

标签: c# asp.net-mvc asp.net-mvc-3

我需要和这个人一样的事情:

http://forums.asp.net/t/1507682.aspx

问题是他标记为正确的答案对我不起作用。我很快就会使用ASP.NET MVC3迁移到MVC4和Windows Server 2012。 由于安全问题,我想阻止直接访问某些图像。这不是Image Leeching保护我现在很担心,我读了几篇关于如何做的文章。

如果链接在我的页面上,就像这样

<img src="/Content/Images/img1.jpg" />

应显示图像,但如果直接访问则不显示:

http://mywebsite.com/Content/Images/img1.jpg

由于我们正在讨论图像和几个访问它的人,因此我可以采用一种考虑性能问题的解决方案。

关于如何实施的任何想法?

感谢。

2 个答案:

答案 0 :(得分:3)

编写一个Action方法,从disk / db读取图像并进行渲染。在该操作方法中,您可以检查用户是否被授权并返回适当的图像或“未授权”的图像。

public class ProductController : Controller
{
  public ActionResult Photo(string id)
  {
   // TO DO:  get image using the unique id passed and render it
  }
}

您可以使用此操作方法的路径作为图像路径。

<img src="@Url.Action("Photo","Product")/someUniqueIDOfPhotoFromYourDB" />

与直接从磁盘提供图像相比,此方法会产生轻微的性能影响。

答案 1 :(得分:3)

你可能想在MVC和handle hotlinking in IIS itself之外思考。 IIS有工具(referer(sic)标题)来判断图像请求是否来自您的网站内部。