我需要和这个人一样的事情:
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
由于我们正在讨论图像和几个访问它的人,因此我可以采用一种考虑性能问题的解决方案。
关于如何实施的任何想法?
感谢。
答案 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)标题)来判断图像请求是否来自您的网站内部。