网站图片防盗链的常见方法
网站图片防盗链的常见方法一、防盗链原理
http标准协议中有专门的字段记录referer,利用referer可以追溯到请求时从哪个网站链接过来的,对于图片资源文件,可以跟踪到引用它的网页地址是什么,因此可以基于这个Referer字段对图片进行防盗链处理。
例如:
1、正常使用百度贴吧查看图片的请求头信息
2、盗链这个图片后的请求头信息
二、网站图片防盗链的常见方法
1、通过nginx 设置图片防盗链
(1)、在Nginx 的配置文件里加入类似如下代码:
location ~.*\.(jpg|gif|png)$ {
valid_referers none blocked *.mysite.com mysite.com;
if ($invalid_referer) {
#rewrite ^/ 防盗链错误页面URL;
return 403;
}
}
说明
[1]、location ~.*\.(jpg|gif|png)$ 表示所有 以 jpg|gif|png 为后缀名的文件都进行防盗链处理。用 (“|”) 来分隔你想保护的文件的扩展名。
[2]、valid_referers none blocked *.abc.com abc.com; 验证referer , 其中:
none 表示直接访问的,不存在referer;
blocked为根据防火墙伪装的 referer。
[3]、#rewrite ^/ 防盗链错误页面URL; 如果图片是放盗链,重定向到地址 防盗链错误页面URL,一般是图片地址,但是要注意,这个图片地址不只能在此防盗链规则里,否则也访问不到。
[4]、return 403;表示403错误。
[5]、除了使用location对文件访问进行限制,也可以对特定目录进行限制,下面的配置会禁止访问images目录下所有文件
location /images/ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return 403;
}
}
2、通过.htaccess文件设置图片防盗链
(1)、在根目录下创建一个.htaccess,如果已经有了,直接把下面的代码复制添加到.htaccess最下端即可。
#RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !允许访问的HTTP来源网址1 [NC]
RewriteCond %{HTTP_REFERER} !允许访问的HTTP来源网址2 [NC]
RewriteRule .*.(gif|jpg|png)$ 防盗链重定向网址[R,NC,L]
(2)、说明
[1]、RewriteCond %{HTTP_REFERER} !^$ [NC]
允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言,这是可选的,不过,建议这么设置,如果强迫必须具有“HTTP_REFERER”才能访问,可能会带来某些问题,比如说在用户通过代理服务器访问时。
[2]、RewriteCond %{HTTP_REFERER} !允许访问的HTTP来源网址1 [NC]
设置允许访问的HTTP来源,包括我们的站点自身、Google、Baidu等。这个可以添加多条
[3]、RewriteRule .*.(gif|jpg|png)$ 防盗链重定向网址[R,NC,L]
定义被盗链时替代的链接,可以是图片,也可以是404错误页,当然替换的页面文件体积越小越好。
3、.NET程序中可以通过 URL Rewrite Module 组件设置图片防盗链
4、通过程序代码控制