【发布时间】:2014-04-01 01:48:18
【问题描述】:
我有一个带有图片的网站,它们的链接通常在其他网站上。我怎么知道我是否可以删除图像?比如检查链接在哪里,或者是否有人从其他网站看到了图片。
希望你能理解我的问题。
谢谢
【问题讨论】:
-
根据您用于提供图像的网络服务器,他们将记录每次访问。这并不完美,但在大多数情况下,登录的推荐人 (en.wikipedia.org/wiki/HTTP_referer) 会告诉你。
我有一个带有图片的网站,它们的链接通常在其他网站上。我怎么知道我是否可以删除图像?比如检查链接在哪里,或者是否有人从其他网站看到了图片。
希望你能理解我的问题。
谢谢
【问题讨论】:
要检查盗链,您需要获取请求图片的 HTTP 查询的 HTTP_REFERER 值。这不是一种可靠的方法,因为有几个原因可能导致它根本没有被填充,即使是在热链接请求中(“个人防火墙”解决方案、代理等)。
您最好的选择是在日志中包含引用者,如果是经常使用的 Apache,请参阅“组合日志格式”
http://httpd.apache.org/docs/2.2/logs.html
然后使用合适的工具(例如 AWstats)分析日志。
要检查损坏的热链接,您可以检查ErrorLog;如果有人不再找到图像,则会在日志中留下痕迹。
如果您无权访问日志(或配置),但您可以访问.htaccess,则可以使用mod_rewrite。
您可以通过内部重定向(用户什么都看不到)链接来做到这一点,例如
http://www.yoursite.com/images/myimage.jpg
到服务器端脚本,例如
http://www.yoursite.com/images/index.php?image=myimage.jpg
现在用户认为他仍在请求myimage,但他实际上是在调用脚本。然后,该脚本可能会在数据库中存储上次访问时间,或者注意使用图像的其他方式:例如在 PHP 中,可以使用函数touch() 来更新文件修改时间。此时,您可以轻松找出哪些文件最近被访问过,哪些没有。
所有这些方法都容易出错(例如,有人可能通过代理盗链并访问您的图像。代理的保留时间很长,即使明智也不会检查上游。您删除图像,什么都没有发生 - 直到一周后代理同步并且您终于看到访问权限;并且失败了),但这是您能做的最好的事情。
【讨论】:
Header('content-type: image/jpeg'); readfile(path_to_real_image); exit();。为了缓存友好性和带宽,您还应该发送 Content-Length、Last-Modified 和 ETag 标头,并可能处理 If-Modified-Since 和 If-None-Match 请求。
您永远无法确定图像是否没有从任何地方链接到,或者是否没有人碰巧访问它。可能有一个页面会热链接图像,但没有获得任何流量。
检查您的网络服务器访问日志会告诉您是否图像正在被使用以及使用频率; setting up referer logs 将帮助您确定图像的使用位置。有了这些数据,您可以从更好的角度考虑下一步行动。
【讨论】:
.htaccess 可以提供类似的功能。
使用 Apache,您可以检查以阻止 hotlinking(当有人从其他网站链接到您的图像时,这就是它的调用方式)。
这是一个答案:http://altlab.com/htaccess_tutorial.html
这是一个生成.htaccesshttp://www.htaccesstools.com/hotlink-protection/的工具
但在 google 上还有更多内容
【讨论】: