【问题标题】:How can i hide/secure image path?如何隐藏/保护图像路径?
【发布时间】:2016-09-07 06:08:12
【问题描述】:

如何在 asp.net 中隐藏/保护图像路径?我不希望用户直接看到图像路径。

我搜索了我的问题并找到了以下网址:

http://www.codeproject.com/KB/web-security/ImageObfuscation.aspx

在此页面上,它建议像这样更改图像路径:

<img ID='ImageControl'   
     src='ShowImage.axd?Path=<% EncryptString("C:\Images\img.ext", Page) %>' 

但是如果用户复制这个图片 src 并用域名将它粘贴到他们的浏览器中,那么它将显示图片。

【问题讨论】:

  • 如果(机密)不发布; if (published) 设置版权和希望

标签: asp.net


【解决方案1】:

绝对没有办法实现这一点,因此无需浪费您的时间和精力。只要浏览器可以显示图片,用户也可以直接获取。

【讨论】:

    【解决方案2】:

    这真的取决于你想要达到的目标。

    如果您试图阻止人们从其他网站链接到您的图片,那么最好的选择是扩展您在问题中提到的处理程序,仅在 @987654321 @ 是您自己的网站。

    这意味着如果他们尝试通过您的处理程序链接到图像,他们只会看到损坏的图像/没有图像,他们将无法直接在浏览器中请求图像,等等。

    您还应该在加密路径中包含某种时间戳,并拒绝来自很久以前的请求 - 这将再次限制链接的有效性:

    <img ID='ImageControl' 
         src='ShowImage.axd?Path=<% EncryptString("C:\Images\img.ext|" + DateTime.Now.ToString(), Page) %>' 
    

    然后在你的处理程序中:

    Dim pathAndTimeEnc As String = ctx.Request.Params("Path")
    Dim pathAndTime As String
    Dim path As String
    Dim timeStamp As DateTime
    
    pathAndTime = Common.DecryptString(pathAndTimeEnc, ctx)
    Dim parts = pathAndTime.Split("|"C)
    path = parts(0)
    timeStamp = DateTime.Parse(parts(1))
    
    Dim fiveMin As TimeSpan = New TimeStamp(0, 5, 0)
    If DateTime.Now.Subtract(timeStamp) < fiveMin Then
      ' Return image.
    End If
    

    如果您试图阻止人们下载您的图片,那么您不会真正阻止最基本的互联网用户 - 毕竟要在您的网站上显示图片,您'需要将其副本发送到客户端浏览器。

    但是,有几个可能的选项可以让它变得更难:

    1. 确保图像立即过期,这意味着浏览器不应将它们保存在本地太长时间 - 但是这确实意味着不会缓存任何图像,并且您最终会为重复查看者使用更高的带宽;如果您使用的是处理程序,您可以在代码中执行此操作: Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetExpires(DateTime.Now);
    2. 使用 CSS 将透明的 1x1 像素图像放置在您网站上的图像顶部 - 这样,如果用户右键单击图像进行保存,他们将获得透明图像的路径,而不是他们自己的路径期待(Flickr 确实/曾经这样做)

    归根结底,如果你把一些内容放到网上,那么很难阻止最敬业的“小偷”拿走和使用它。

    【讨论】:

      【解决方案3】:

      您可以做一些技巧,将真实图像路径符号链接到某个(一次)临时位置,然后发送给客户端。客户端收到图像后,可以删除符号链接;虽然......真是个黑客!

      图片路径怎么是秘密的?

      【讨论】:

        【解决方案4】:

        您可以这样做,但这需要大量工作,人们能够绕过它,因此需要有一个非常好的理由这样做,并且您需要认识到它永远不会是 100% 的解决方案。它(充其量)将是防止非技术人员抓取图像的解决方案。 (甚至他们也可以使用 Alt+PrintScreen。)而且你正在做的任何实际产生价值的事情都会花费时间。

        但是:

        基本上,您可以使用与 IP 地址绑定的一次性路径。当请求页面时,记录 IP 地址并为该页面生成自定义图像路径,基本上以“http://example.com/images/alsdkjflaskdf”(或“http://example.com/images/getimage”的形式?alsdkjflaskdf”,如果您不能执行自定义 URL 处理程序),其中“alsdkjflaskdf”部分是一个加密/混淆的、一次性的图像路径,仅对该 IP 地址有效,并且仅在给定的时间段内有效.一旦时间到或已被使用,请从您的数据库(或您用来跟踪的任何内容)中清除生成的路径。

        路径是

        • 限于IP地址
        • 限时
        • 一次性

        如您所见,这很痛苦,我可以通过wget 轻松解决它。几乎可以肯定,您的时间最好花在其他地方。

        【讨论】:

          【解决方案5】:

          将路径存储在数据库或 xml 中。为每个路径存储某种唯一的 id 并重写处理程序以从数据源查询路径。你可以这样使用:

          < img ID='ImageControl' src='ShowImage.axd?ID=1 %>'
          

          并且路径仍然是秘密:)

          好的。重读原帖。尝试存储会话 witch 页面已被看到。如果没有或没有包含图片的页面您会显示黑屏。是的,访问者可以看到他/她看到页面后是否使用链接,但直到会话处于活动状态。如果他/她链接到某个地方,该链接将不起作用。

          【讨论】:

            猜你喜欢
            • 2022-11-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多