`
sitoto
  • 浏览: 123747 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

图片防盗链的

 
阅读更多

本文要说的问题是:
用户粘贴的图片是对方防盗链处理的图片,别人就无法看到图片了,体验很不好。

有问题就有解决办法,但需要预热一下:
1 别人是如何做图片防盗链的?
2 如何可以避免在防盗链范围?

了解或者解决以上两个问题你就可以出师了啦!

众所周知,图片防盗链是为了让自己的服务器提供给固定的某些域名下的网页显示自己的图片,主要为了解决带宽的占用问题。
阿权之前管理的图片类型的网站,居然可以让盗链的图片流量跑满了服务器带宽,所以盗链的问题很讨厌,一般网站都会处理此问题,一般采取的是检查图片请求的referer参数,这个不明白那这个课题还不适合你来读。

我们来看看凤凰网的图片防盗链,图片是很hot的美女哦,curl就可以测试:

[root@aslibra ~]# curl -I http://img.ifeng.com/res/200906/0610-070615_1339_20.jpg
HTTP/1.1 200 OK
Server: DnionOS/1.0
Date: Fri, 26 Jun 2009 13:14:31 GMT
Content-Type: image/jpeg
Connection: keep-alive
Last-Modified: Wed, 10 Jun 2009 11:16:05 GMT
Accept-Ranges: bytes
Content-Length: 37727
Expires: Wed, 23 Jun 2010 08:11:48 GMT
Cache-Control: max-age=31536000
X-Cache: HIT from cache26.ifeng.com
Age: 24507
X-Cache: HIT from CNC-BJBY-53-172.fastcdn.com

[root@aslibra ~]# curl -I http://img.ifeng.com/res/200906/0610-070615_1339_20.jpg -H "referer:http://www.aslibra.com/"
HTTP/1.1 403 Forbidden
Server: DnionOS/1.0
Date: Fri, 26 Jun 2009 13:14:57 GMT
Content-Type: text/html
Connection: keep-alive
Content-Length: 1204
Expires: Fri, 26 Jun 2009 13:15:02 GMT
X-Squid-Error: ERR_ACCESS_DENIED 0
X-Cache: MISS from CNC-BJBY-53-172.fastcdn.com

[root@aslibra ~]# curl -I http://img.ifeng.com/res/200906/0610-070615_1339_20.jpg -H "referer:http://img.ifeng.com/"
HTTP/1.1 200 OK
Server: DnionOS/1.0
Date: Fri, 26 Jun 2009 13:17:37 GMT
Content-Type: image/jpeg
Connection: keep-alive
Last-Modified: Wed, 10 Jun 2009 11:16:05 GMT
Accept-Ranges: bytes
Content-Length: 37727
Expires: Wed, 23 Jun 2010 08:11:48 GMT
Cache-Control: max-age=31536000
X-Cache: HIT from cache26.ifeng.com
Age: 24691
X-Cache: HIT from CNC-BJBY-53-172.fastcdn.com


第一个是没有来源标识的,一般为在窗口直接输入图片地址
第二个是模拟在网页里面的图片,网址假设为http://www.aslibra.com/
第三个是模拟在img.ifeng.com的网页打开的

第一个和第三个返回是200的状态码,图片正常,第二个则因为是非授权网页引用,返回了403禁止的消息。
也有可能是返回200的状态码的,比如百度hi的图片:

[root@aslibra ~]# curl -I http://hiphotos.baidu.com/yuanyingmanhua/pic/item/6e1da9d832163a3b33fa1c2b.jpg
HTTP/1.1 200 OK
...
Cache-Control: max-age=315360000
Expires: Sun, 08 May 2016 14:12:03 GMT
Last-Modified: Sat, 29 Apr 2006 07:04:00 GMT
Content-Length: 43171
...

[root@aslibra ~]# curl -I http://hiphotos.baidu.com/yuanyingmanhua/pic/item/6e1da9d832163a3b33fa1c2b.jpg -H "referer:http://www.aslibra.com/"
HTTP/1.1 200 OK
...
Cache-Control: no-cache
Content-Length: 1809
...


当然,如果对方服务器是验证用户的信息的,那就没法解决了,我们能够解决的防盗链一般是根据来源防盗链的服务器。
注意了,破解对方的防盗链并非坏事,是为了提高用户体验,解决一般的用户的疑惑,他们根本不知道粘贴的图片为什么不正常,这你没必要跟他们聊一下图片防盗链吧?

你也许只要付出一台服务器就可以解决了:
1 首先你得把防盗链的域名的图片地址给替换为你的服务器域名,因为正常的访问你是控制不了referer信息的
2 交给代理服务器去掉或者修改referer信息,这个nginx很简便解决
3 再交给缓存服务器下载此图片,缓存此图片,这样对对方服务器没有什么影响,是好事来的

步骤1:替换图片地址

第一个就不用多说了,比如php就可以处理:

//example php code
$content = ereg_replace("http://($domain)/", "http://proxy.www.aslibra.com/m/\1/", $content);
// from http://img.ifeng.com/res/200906/0610-070615_1339_20.jpg
// to http://proxy.www.aslibra.com/m/img.ifeng.com/res/200906/0610-070615_1339_20.jpg


这样的简单处理可以保留所有的图片地址信息,而且可以自动还原原来的请求地址

步骤2 去掉或更改referer信息

这个有很多方法,比如配置proxy.www.aslibra.com/m交给php处理,php容易分析出地址,并且可以用socket或者调用curl等系统命令来下载图片,然后返回给用户。
这里用web服务器(nginx)解决这个问题,肯定比php来的简便和高效:

upstream squid {
  server 127.0.0.1:3128;
}
server {
  expires       240h;
  server_name  proxy.www.aslibra.com;
  if ( $uri ~ ^/m/([^/]+)(.+)) {
    set $new_host $1;
    set $referer "";
    #set $referer http://$1/; #you can set it like this
    rewrite ^/m/([^/]+)(.+) $2 break;
  }
  location / {
    proxy_set_header host $new_host;
    proxy_set_header referer  $referer;
    proxy_pass        http://squid;
  }
}


简单来说就是rewrite回原先的地址,并且设置referer,交给squid的后端。

步骤3 交给代理服务器缓存

visible_hostname cache.aslibra.com
acl all src 0.0.0.0/0.0.0.0
http_access allow all
http_port 127.0.0.1:3128
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_uses_host_header on
httpd_accel_with_proxy off
cache_dir ufs /cache/proxy.www.aslibra.com 2000 16 256
cache_effective_user daemon
cache_access_log none
cache_store_log none
cache_log none


以上是squid的配置(2.5版本),基本不用配置什么参数,能代理缓存即可,有别的合适软件也许也可以做,但squid做这个实在是太合适了!你的不二之选!

实验效果很正常,返回的信息如下,访问两次有HIT说明就正常了:

(Status-Line)  HTTP/1.1 200 OK
Cache-Control  max-age=864000
Connection  keep-alive
Content-Length  59969
Content-Type  image/jpeg
Date  Fri, 26 Jun 2009 13:42:32 GMT
Expires  Mon, 06 Jul 2009 13:42:32 GMT
Last-Modified  Mon, 18 Dec 2006 07:25:14 GMT
Server  nginx/0.7.59
X-Cache  HIT from cache.aslibra.com



点击在新窗口中浏览此图片

效果对比,前面会提示禁止引用,后面是解决后正常显示图片的效果!
很神奇吧~~ 这样就为用户体验提高了一个等级啦~
注意,以上方案域名为测试指定,访问并非正常,请自行修改相关内容进行试验,大家使用愉快!


本解决方案目前无法解决的类型:

1 不是判断referer信息来防盗链的,当然如果你知道,也许可以类似方式解决
2 不能解决redirect后的图片,也许可以使用nginx的内部redirect来处理,还没试验,这类情况还不多

原文链接:http://www.aslibra.com/blog/post/crack_pic_referer_solution.php

分享到:
评论

相关推荐

    如何快速解决图片防盗链问题

    ### 如何快速解决图片防盗链问题 在互联网时代,内容创作和分享变得异常便捷,但同时也带来了版权保护的问题。其中一个常见的问题是图片防盗链。对于个人博客、SEO优化者、网站管理员以及内容创作者来说,遇到防盗...

    图片防盗链(jsp)

    "图片防盗链"技术就是为了防止这种情况发生的一种策略。本文将深入探讨如何使用JSP实现图片防盗链,并讨论相关技术。 一、理解图片防盗链 图片防盗链,即防止其他网站通过URL直接引用你的服务器上的图片,避免消耗...

    破解图片防盗链servlet

    #### 一、图片防盗链机制的理解与原理 1. **防盗链的概念**:防盗链(Hotlink Protection)是指网站为了防止其他站点未经允许直接链接自己的资源(如图片、视频等),采取的一种技术手段,用以避免资源被非法使用...

    httpHandler实战应用:RSS-图片防盗链接-图片验证码

    本实战应用主要探讨如何利用HTTPHandler实现RSS图片防盗链和图片验证码功能,这些都是网站安全和内容保护的重要手段。 首先,让我们详细了解HTTPHandler。HTTPHandler是ASP.NET中的一个接口(IHttpHandler),它...

    ASP.NET 图片防盗链示例

    ASP.NET 图片防盗链示例是一个实用的编程实践,它主要针对网站的图像资源保护问题。在互联网上,图片被盗用是一种常见的现象,这不仅侵犯了原创者的权益,也可能对网站的流量造成损失。因此,实施图片防盗链技术是...

    ISAPI Rewrite实现IIS图片防盗链

    为了实现图片防盗链,根据网络上搜集的资料加上自己的实践,终于实现了iis下的图片防盗链功能。  实施步骤:  1.下载比较出名的www.helicontech.com提供的ISAPI Rewrite软件的免费版本(免费版本虽然有一些功能上...

    Java爬取web图片防盗链

    HttpURLConnection+jsoup防盗链 {"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661...

    图片防盗链破解代码ASP

    可以破解任何网站的图片防盗链,极简的代码,使用时只需将图片地址改成http://你的网址/i.asp?url=图片原地址,即可调用任何网站的图片。

    Asp.Net MVC 图片防盗链(v_1.1.0)

    在Asp.Net MVC框架中,图片防盗链是一个重要的安全措施,尤其对于那些主要依赖图片内容的网站来说。图片防盗链技术的主要目的是防止未经授权的第三方站点通过URL直接引用或嵌入你的网站图片,从而节省带宽资源,保护...

    采集破解防盗链图片显示的方法

    在互联网上,图片防盗链是一种常见的保护措施,用于防止他人未经许可直接引用网站上的图片资源。这导致了图片采集过程中可能会遇到图片无法显示的问题。本文将深入探讨如何使用PHP来破解防盗链,以便在采集图片时能...

    无视图片防盗链php单文件.zip

    在互联网上,图片防盗链是一种常见的安全措施,用于防止他人未经许可盗用网站的图片资源。这个名为"无视图片防盗链php单文件.zip"的压缩包包含了一个PHP文件(img.php)和一个使用说明(使用说明.txt),显然是为了...

    asp.net中利用ashx实现图片防盗链

    在ASP.NET中,实现图片防盗链是保护网站资源、防止他人网站随意调用自身服务器上的图片资源、节省带宽及服务器资源的一种常见策略。本文将详细介绍如何通过ashx(Application Handler)来实现这一功能。 ### ashx ...

    图片防盗链.java

    图片防盗链.java图片防盗链.java图片防盗链.java

    采集百度,google,yahoo的搜索图片,asp.net破图片防盗链

    标签“采集百度,google,yahoo的搜索图片,asp.net破图片防盗链”综合了以上两个主题,暗示这是一个关于如何在ASP.NET环境中处理图片爬取及防盗链问题的项目或教程。 从压缩包文件名称“caiji”来看,这可能是爬虫...

    ASP.NET实现图片防盗链功能

    ASP.NET 实现图片防盗链功能是一项重要的网络安全措施,旨在防止他人未经许可地引用或嵌入网站上的图片资源,从而节省带宽、保护版权并提升用户体验。以下是一个详细的步骤指南,教你如何在 ASP.NET 中实现这一功能...

    asp.net图片防盗链

    在ASP.NET中,图片防盗链是一项重要的安全措施,主要用于防止他人未经许可地引用或盗用网站上的图片资源,减轻服务器负担,保护网站的版权。本文将深入探讨ASP.NET实现图片防盗链的技术细节、方法和最佳实践。 首先...

    PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】

    在互联网上,图片防盗链是一项常用的技术手段,目的是防止网站的图片资源被其他网站盗用。一般来说,当一个网页试图加载外部网站的图片时,该网站的服务器会检查HTTP请求中的REFERER字段,以确认请求是否来自允许的...

    亦梦IIS图片防盗链 v5.0

    【亦梦IIS图片防盗链 v5.0】是一款针对IIS服务器的插件,主要用于防止网站中的图片被外部站点非法引用,即所谓的“盗链”现象。在互联网上,图片资源是网站的重要组成部分,尤其是对于图片分享或者摄影类网站,图片...

    java 防盗链详解及解决办法

    防盗链的概念是指在自己的服务器上,通过技术手段将其他网站的内容(比如一些音乐、图片、软件的下载地址)放置在自己的网站中,通过这种方法盗取其他网站的空间和流量。防盗链是一种不道德的行为,会对原网站造成很...

    三招两式 解决图片盗链无法查看问题

    首先,了解图片防盗链的原理是关键。几乎所有网站的防盗链功能都是通过检查HTTP请求中的头部信息来实现的,特别是"referer"字段。当图片的HTTP请求中包含正确的"referer"信息时,网站服务器认为请求来自本网站域内,...

Global site tag (gtag.js) - Google Analytics