网站资源防盗链结构设计

标题索引


  • 追溯原因

  • 数据测试

  • 防盗结构


追溯原因

    一步一印,有印为证,网站资源防盗链老生常谈,但是如何才能确保网站资源如图片等特殊资源不被盗链?这不仅仅是运维人员所考虑的问题,更是开发人员必须控制并解决的一个问题,但因爬虫、浏览器插件和开发人员自行伪造http_referer等等技术原因,单纯服务器端设置防盗链远远无法解决此问题,参考相关资料决定从架构的角度根本上解决防盗链(另外通过referer记录请求资源从哪个网页链接过来的,从而可统计百度推广链接的次数等)。

数据测试

    实验目的:测试http携带referer时的条件

    测试拓扑:见图1-1

网站资源防盗链结构设计

图1-1 测试拓扑

    测试配置:服务器配置Nginx服务,在Nginx服务中配置两站点,并在站点www.a.com中映射资源a.jpg,站点www.b.com盗链www.a.com中的a.jpg资源,具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[ root@server conf.d ]#pwd
/etc/nginx/conf.d
[ root@server conf.d ]#vim virtual.conf
 server {
     listen 80;
     index index.html;
     server_name www.a.com;
     root /app/website01/;
     location /admin {    
             return 403 
              }
 
 server {
     listen 80;
     index index.html;
     server_name www.b.com;
     root /app/website02/;
     location /admin 
             return 403           
     }
 }
 [ root@server ~ ]#mkdir /app/website01
 [ root@server ~ ]#echo "Welcome to website01" > /app/website01/index.html
 [ root@server ~ ]#cp /data/picture/a.jpg /app/website01/
 [ root@server ~ ]#mkdir /app/website02
 [ root@server ~ ]#echo "Welcome to website02" > /app/website02/index.html
 [ root@server ~ ]#echo "<img src=http://www.a.com/a.jpg" >> /app/website02/index.html

   测试方1户端直接访问www.b.com/a.jpg资源,测试结果为请求报头中无referer信息,具体见图1-2

网站资源防盗链结构设计

图1-2 客户端直接请求资源抓包分析图

    测试方法2客户端访问www.a.com资源,然后通过www.a.com中的链接文件进入www.b.com网站,测试结果为请求包头中有referer信息,表明盗链地址来源,见图1-3

网站资源防盗链结构设计 

图1-3:客户端盗链网站资源抓包分析图

    测试说明:以如下方式浏览在http请求报文头部中无referer信息

        1.用户直接输入网站,http请求报文中无referer信息;
        2.通过浏览器插件,修改referer后,http请求报文无referer信息;
        3.通过https跳转至http中,http请求报文无referer信息。

防盗结构

    根据上述测试可知,用户在盗链时可以http头部携带referer参数,因此在防盗链时总体设计思路如下:

    1.服务器端开启有效referer请求配置,非有效referer则返回错误403或错误404状态码;

    2.服务器端设置有效referer后,防止客户端伪造有效referer,如网站运行百度推广或通过百度打开企业网站,因 此企业web搭建时将www.baidu.com列如有效referer,故客户端伪造www.baidu.com的referer进行盗链。

    3.防盗链技术层次采用,服务器A为图片服务器,服务器B为对外服务器,服务器B调用图片时,再次盗链图片服务器A,因此当其他外网web服务器盗链本企业服务器Bweb的资源时,最多只能copy粘贴文字,而不能讲企业内部服务器A资源图片进行盗链。

   总上上述防盗链设计思路,设计网站结构如下,也是当下互联网企业常用技术方案之一,Web服务器资源动静分离,图片采用独立的分布式存储。拓扑图如下:

网站资源防盗链结构设计

图1-4:Web防盗链结构设计

    当然对外服务器端需配合http_referer_module更加安全可靠, 具体配置可参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[ root@server conf.d ]#vim virtual.conf
 server {
     listen 80;
     index index.html;
     server_name www.a.com;
     root /app/website01/;
     location / {
     valid_referers none blocked server_names
               #通配符,只要满足如下通配符即可
               *.a.com example.*  www.a.com
               #正则表达式,定义模式\.baidu\.只要匹配此模式就允许通过 
               ~\.baidu\.;
     if ($invalid_referer) {
               return 403;
               #或者跳转到其他页面
                #rewrite .* http://www.a.com/403.html
              }
     }
     location /admin {    
             return 403 
              }
     }
上一篇:vhd 转换为img源码,由VS2010 C++编译


下一篇:并非遥不可期!智能家居“黑科技”盘点