如何在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并将其粘贴到带有域名的浏览器中,则会显示图像。
答案 0 :(得分:7)
绝对没有办法实现这一目标,因此无需浪费您的时间和精力。只要浏览器可以显示图像,用户也可以直接获取它。
答案 1 :(得分:2)
这实际上取决于你想要达到的目标。
如果您尝试阻止人们从其他网站链接到您的图片,那么最好的选择是将您在问题中提到的处理程序扩展为只返回{{{{ 1}}是您自己的网站。
这意味着如果他们确实尝试通过您的处理程序链接到图像,他们只会看到图像损坏/没有图像,他们将无法直接在浏览器中请求图像等。< / p>
您还应该在加密路径中包含某种时间戳,并拒绝来自很久以前的请求 - 这将再次限制链接的有效性:
Request.Referrer
然后在你的处理程序中:
<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
Response.Cache.SetCacheability(HttpCacheability.NoCache);
在一天结束时,如果你把一些内容放到网上,那么很难阻止最专注的“小偷”接受并使用它。
答案 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地址有效,并且只在给定时间段内有效。一旦时间结束或已经使用,请从数据库中清除生成的路径(或者您用来跟踪的任何内容)。
路径是
正如您所看到的,这很痛苦,我可以使用wget
轻松解决这个问题。你的时间几乎肯定会更好地花在其他地方。