如何模糊ASP.NET MVC中的URL以防止图像下载?

时间:2014-06-01 06:36:56

标签: jquery asp.net-mvc image download


到目前为止,我有一个jQuery解决方案,以防止右键单击图像和任何可能出现的"上下文菜单"允许文件下载:

$("img").each(function () {
    $(this).contextmenu(null, function () {
        /* preventing the "context menu" that appears after a right-click,
         * or whatever other possible way through the keyboard: */
        return false;
    });
    $(this).click(function (e) {
        if (e.button === 2) {
            // preventing right-click:
            return false;
        }
    });
});


用户可能仍然右键单击页面的任何其他部分,查看源代码,然后按照惯例通过img src访问该文件。

<小时/> 我不想禁用右键单击整个文档,而在我的谷歌搜索中这些似乎是可能的:

  • 将图片放入App_Data文件夹? ( ...当时发出404错误 尝试访问App_Data/Images/foobar.jpg
  • 之类的内容
  • 将这样的内容添加到Web.config? ( ......没有做任何事情):


  <location path="Content/Images">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>


那么有可能以某种方式混淆源代码中显示的URL吗?

2 个答案:

答案 0 :(得分:1)

简短的回答并不容易,如果您在HTML文档中将其发送到浏览器,则该文件必须是可访问的,并且用户将能够检索它。如果图像非常重要,你可以使用flash画廊或java applet,但是当你谈论大众访问时,它们都有自己的问题。 Flash没有在手机和Java小程序上运行被视为安全风险。

现在,如果你试图变得疯狂,你可以创建一个动态创建URL的机制,只提供一次但这需要你让每个IMG URL调用数据库来存储,然后通过创建自己的文件发送者路由。对不起,这可能不太清楚我在沙发上的电话打字:)。

这种方法并不是完整的证据,因为浏览器会缓存所有内容,所以如果有人想要它足够糟糕,他们就会得到它。如果你只是试图让它变得更难,那么普通人就不会这样做。

最后要考虑的是这样的任何行动都可能对seo不利。您不希望Google在他们抓取的每张图片上获得404。

答案 1 :(得分:0)

你有没有考虑过使用Generic Handler来完成这项工作?这样您就不需要将图像存储在用户可访问的位置。 以下是我在asp.net c#中使用的一些例子:

http://www.binaryintellect.net/articles/859d32c8-945d-4e5d-8c89-775388598f62.aspx http://www.intstrings.com/ramivemula/asp-net/how-to-download-files-from-server-to-client-using-a-generic-handler/

我知道线程已经老了,但我希望这会有所帮助。