高并发大流量专题---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字段做对比,如果相同就允许访问,否则不允许
二、内容在总结中
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
在校每年国奖、每年专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。
2025-01-31:宅加太忙,特此在网上找女朋友,坐标上海,非诚勿扰,vx:fan404006308
AI交流资料群:753014672
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步