描述
网站非法调用其它网站的图片、视频、音乐、软件等资源,消耗其它网站的流量,侵犯其它网站的资源,造成其它网站服务器宽带与压力增大,甚至宕机。
Apache Web服务器解决方案
1 > http referer方式
在http协议中,有一个头部字段:referer,表示请求的来源网站,通过检查来源网站是否受信任来回应对应的资源。
在文件 httpd.conf 配置如下:
<VirtualHost *:80>
... #省略
RewriteEngine On
RewriteCond %{HTTP_REFERER} ! ^http://test.com/.*$ [NC]
RewriteRule .*\.(gif|jpg|swf|png|jpeg|mp4|mp3)$ http://www.test.com/img/nolink.jpg [R,NC]!
</VirtualHost>
说明:
1. http://test.com表示网站的信任站点,多行表示多个信任站点;
2. gif|jpg|swf|png|jpeg|mp4|mp3表示要保护的防止被盗链的文件的扩展名(以|分开);
3. http://www.test.com/img/nolink.jpg表示被盗链后的重定向页面或图片,如果是图片则尽量小并说明版权保护;
注意:
1. 不是所有的浏览器都会设置referer变量,而且referer是可以被伪造或被修改的;
2. 这种方式只是简单的防护手段,应付一般的盗链也足够了。
2 > 使用 cookie + rewrite
用户访问网站时,提供一个特别的 key => value 保存在用户cookie里,服务器检查用户cookie是否正确设置而区别回应。
在文件 httpd.conf 配置如下:
<VirtualHost *:80>
... #省略
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^.*(?: key=value).*$ #检查cookie是否正确设定 key = value
RewriteRule ^.*$ http://test.com/error.html #没有正确设定则重定向到错误页面或版权保护图片
</VirtualHost>
Nginx web服务器解决方案
在默认情况下,只需要进行简单的配置即可实现防盗链处理:
location ~* \. (jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers none blocked *.test.org;
if ($invalid_referer) {
rewrite ^/ http://www.test.org/img/nolink.jpg;
}
}
说明
- "jpg|gif|png|..." 表示对这些扩展名的资源进行防盗链处理;
- ".test.org" 表示这个网站域名可以正常访问;
- if {}表示:如果检查不通过,就跳转到rewrite指定的地址,也可以直接通过return返回403错误。
如果不怕麻烦,推荐使用NginxHttpAccessKeyModule这个东西,它的运行方式是:如果我的download目录下有一个file.zip的文件,对应的URL是http://www.ccvita.com/download/file.zip使用ngx_http_accesskey_module模块后http://www.ccvita.com/download/file.zip?key=09093abeac094,只有给定的key值正确了,才能给下载download目录下的file.zip文件,而且key值是根据用户的IP有关的,这样就可以避免被盗链了。据说NginxHttpAccessKeyModule现在连迅雷都可以防了。