微信扫一扫打赏支持

高并发大流量专题---2、流量优化(防盗链处理)

高并发大流量专题---2、流量优化(防盗链处理)

打赏

 

一、总结

一句话总结:

其实把原理用清楚了,剩下就是用点脑子,比如别人Referer防盗链如何解决

 

1、盗链概念及相关?

他人网站资源:盗链是指在自己的页面上展示一些并不在自己服务器上的内容,获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容
小站盗大站:常见的是小站盗用大站的图片、音乐、视频、软件等资源
减轻自己服务器的负担:通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器

 

2、防盗链概念?

防盗链:防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页面的资源链接失效

 

3、防盗链的工作原理?

访问网站来源和nginx中我们的配置做对比:通过Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。一旦检测到来源不是本站即进行阻止或者返回指定的页面

 

4、防盗链常用的两种方法?

检测Referer
资源签名检测

 

5、如何查看请求的来源网站?

chrome->f12->network->Headers->Request Headers:比如 Referer: https://www.cnblogs.com/

Request Headers
Provisional headers are shown
Referer: https://www.cnblogs.com/
User-Agent: Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Mobile Safari/537.36

 

6、防盗链Referer实现方法 的注意点?

|||-begin

复制代码
Nginx 模块ngx_http_referer_module 用于阻挡来源非法的域名请求

Nginx指令valid_referers,全局变量$invalid_referer

valid_referers none | blocked | server names | string..

location
~* \.(jpg|png|gif|jpeg)$ { valid_referers none blocked www.baidu.org *.baidu.org; #有效referers if ($invalid_referer) { #无效referer怎么办 rewrite ^/ http://www.baidu.org/403.html; # 如果有盗链的情况就使用url重写到错误页面或者错误图片 } }
复制代码

|||-end

none:“Referer"来源头部为空的情况
blocked:“Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http:/或者https://开头.
server_names:“Referer"来源头部包含当前的server_names

 

 

7、网站使用referer方式防止盗链,如何破解?

伪造Referer:伪造成google,百度,或者就是当前网站的referer即可解决

 

8、用户使用 伪造Referer 方式来破解 referer方式防盗链, 如何防,及这种方法优缺点?

可以使用加密签名解决
加密签名缺点:麻烦:每个资源请求都需要加上签名验证字段:echo '<img src="./1ogo_new.png?sign='.$sign.'">';
复制代码
使用第三方模块HttpAccesskeyModule实现Nginx防盗链
accesskey onloff 模块开关
accesskey_hashmethod md5 | sha-1签名加密方式
accesskey_arg GET参数名称
accesskey_signature 加密规则

nginx中配置
location ~* \.(jpg|png|gif|jpeg)$ {
    accesskey on; #开启accesskey
    accesskey_hashmethod md5; #使用md5加密
    accesskey_arg sign; #资源要带的字段
    accesskey_signature "jason$remote_addr"; #使用md5加密的字段
}
表示jason字符串加客户端ip$remote_addr,然后一起md5加密

php端代码
$sign=md5('jason'.$_SERVERI' REMOTE_ADDR']); 
echo '<img src="./1ogo_new.png?sign='.$sign.'">';
复制代码

 

 

9、使用如何加密签名解决防止盗链的原理是什么?

|||-begin

复制代码
使用第三方模块HttpAccesskeyModule实现Nginx防盗链
accesskey onloff 模块开关
accesskey_hashmethod md5 | sha-1签名加密方式
accesskey_arg GET参数名称
accesskey_signature 加密规则

nginx中配置
location ~* \.(jpg|png|gif|jpeg)$ {
    accesskey on; #开启accesskey
    accesskey_hashmethod md5; #使用md5加密
    accesskey_arg sign; #资源要带的字段
    accesskey_signature "jason$remote_addr"; #使用md5加密的字段
}
表示jason字符串加客户端ip$remote_addr,然后一起md5加密

php端代码
$sign=md5('jason'.$_SERVERI' REMOTE_ADDR']); 
echo '<img src="./1ogo_new.png?sign='.$sign.'">';
复制代码

|||-end

php端生成的sign字段和nginx端生成的sign字段做对比,如果相同就允许访问,否则不允许

 

 

 

二、内容在总结中

 

 

 

 
posted @   范仁义  阅读(489)  评论(0编辑  收藏  举报
侧边栏

打赏

点击右上角即可分享
微信分享提示