防盗链小结

防盗链

防止别人通过一些技术手段绕过本站的资源展示页面
盗用本站的资源 让绕开本站资源展示页面的资源链接失效
有效避免服务器产生不必要的流量以及占用带宽

防盗链的工作原理

通过Referer或者加密签名 网站可以检测目标网页访问的来源网页是否合法
一旦检测来源不合法即进行阻止(return 403) 或返回指定页面

Referer

Nginx模块 ngx_http_referer_module 实现nginx防盗链
用于阻挡来源非法的域名请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# nginx配置文件中 server段添加针对图片文件
# 也可以针对目录 location /images/
location ~ .*\.(gif/jpg/jpeg/png/bmp/swf)$
{
# 设置none 因为直接通过浏览器访问该地址 refer为空
# blocked允许设置ip 不带http或https协议
valid_referers none blocked lkc.im *lkc.im
if ($invalid_referer)
{
return 403;
# 重写 返回一张提示型图片
# rewrite ^/ https://lkc.im/Anti-theft-chain.png;
}
}

这种方法可以提高不少门槛 但是还是可以使用伪造Referer实现盗链

加密签名

使用第三方模块 HttpAcccessKeyModule 实现nginx防盗链

常见参数信息

  • accesskey on | off 是否开启模块
  • accesskey_hashmethod md5 | sha-1 签名加密方式
  • accesskey_arg “key” GET参数名称
  • accesskey_signature string 加密规则
1
2
3
4
5
6
7
8
# nginx配置
location ~ .*\.(gif/jpg/jpeg/png/bmp/swf)$
{
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "mypass$remote_addr";
}
1
2
3
# PHP代码
$key = md5('mypass'.$_SERVER['REMOTE_ADDR']);
echo '<img src="./demo.png?key='.$key.'">';

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×