我如何隐藏/保护图像路径?

时间:2010-11-16 10:07:28

标签: asp.net

如何在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并将其粘贴到带有域名的浏览器中,则会显示图像。

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

这实际上取决于你想要达到的目标。

如果您尝试阻止人们从其他网站链接到您的图片,那么最好的选择是将您在问题中提到的处理程序扩展为只返回{{{{ 1}}是您自己的网站。

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

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

Request.Referrer

然后在你的处理程序中:

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

如果你想阻止人们下载你的图片,那么你真的不会停止比最基本的互联网用户更多 - 毕竟在你的网站上显示图像,你'我需要将它的副本发送到客户端浏览器。

然而,有几种可能的选择使其变得更难:

  1. 确保图像立即过期,这意味着浏览器不应该长时间保留它们 - 但是它确实意味着不会缓存任何图像,并且最终会为重复观看者提供更高的带宽使用率;如果您使用的是处理程序,可以在代码中执行此操作: 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 Response.Cache.SetCacheability(HttpCacheability.NoCache);
  2. 使用CSS在您网站上的图片顶部放置一个透明的1x1px图片 - 这样,如果用户右键点击图片进行保存,他们将获得透明图片的路径,而不是他们的路径期待(Flickr /曾经这样做过)
  3. 在一天结束时,如果你把一些内容放到网上,那么很难阻止最专注的“小偷”接受并使用它。

答案 2 :(得分:0)

你可以做一些破解,将实际图像路径符号链接到发送到客户端的某个(一次)临时位置。一旦客户端收到图像,就可以删除符号链接;虽然......真是个黑客!

图像路径是如何保密的?

答案 3 :(得分:0)

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

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

路径保密:)

确定。重读原帖。尝试存储会话页面已被看到。如果没有人或者没有包含图片的页面你显示黑屏。是的,访问者可以看到他/她看到页面后是否使用该链接,但直到会话还活着。如果他/她链接到某个地方,该链接将无效。

答案 4 :(得分:0)

你可以做到这一点,但这将是很多工作,人们 将能够绕过它,所以需要有一个非常好的理由去做和你需要认识到它永远不会是100%的解决方案。它(充其量)将成为防止非技术人员抓取图像的解决方案。 (甚至他们也可以使用Alt + PrintScreen。)而且你需要花时间去做一些实际产生价值的事情。

可是:

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

路径是

  • 仅限IP地址
  • 限时
  • 一次性只

正如您所看到的,这很痛苦,我可以使用wget轻松解决这个问题。你的时间几乎肯定会更好地花在其他地方。