防盗链的原理以及实现
时间:2022-07-24
本文章向大家介绍防盗链的原理以及实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
盗链的概念
盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容 获取别人的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容 一般被盗链的都是 图片 音乐 视频 软件等资源 通过盗链的手段可以减轻自己服务器的负担
防盗链的工作原理
通过Refer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以追踪到显示他的网页地址 一旦检测到来源不是本站,即进行阻止或者返回指定的页面
防盗链的实现方法
Nginx模块,ngx_http_referer_module用于阻挡来源非法域名的请求 nginx指令valid_refers,全局变量$invalid_refer
对资源的防盗链nginx配置为
location ~.*.(gif|jpg|png|flv|swf|rar|zip)$
{
valid_referers none blocked test.com *.test.com; //加none的目的是确保浏览器可以直接访问资源
if($invalid_referer)
{
#return 403; // 直接返回403
rewrite ^/ http://www.test.com/403.jpg;//返回指定提示图片
}
}
对目录的防盗链nginx配置为
location /images/
{
valid_referers none blocked test.com *.test.com;
if($invalid_referer)
{
#return 403;
rewrite ^/ http://www.test.com/403.jpg;
}
但是传统的防盗链也会存在一些问题,因为refer是可以伪造的 所以可以使用加密签名的方式来解决这个问题 什么是加密签名?就是当我们请求一个图片的时候,woya我要给他带一些签名过去,然后返回图片的时候我们判断下签名是否正确,相当于对一个暗号。
可以使用第三方模块HttpAccessKeyModule来解决防盗链的问题,我们需要去安装
安装好有这样一个指令:
accesskey on|off 模块开关
accesskey_hashmethod md5 | sha-1 签名加密方式
accesskey_arg GET参数名称
accesskey_signature 加密规则
location ~.*.(gif|jpg|png|flv|swf|rar|zip)$
{
accesskey on;
accesskey_hashmethod md5;
accesskey_arg sign;
accesskey_signature "mypass$remote_addr";
}
意思是mypass加客户端ip通过md5加密 图片文件代码:
<?php
$sign = md5('mypass' . $_SERVER['REMOTE_ADDR']);
echo '<img src="./photo.jpg?sign='. $sign .'">';
?>
以上就是防盗链的两种形式,欢迎伙伴们进行ta讨论留言。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python钉钉报警及Zabbix集成钉钉报警
- 无锁队列的实现
- Go 单元测试和性能测试
- 01 . etcd简介原理,应用场景及部署,简单使用
- GO 单例模式
- 关于本博客皮肤样式配置
- 03 . Go开发一个日志平台之Elasticsearch使用及kafka消费消息发送到Elasticsearch
- GO 匿名函数和闭包
- Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183)和HTTP服务器的缺省banner漏洞
- GO中间件(Middleware )
- TomcatAJP文件包含漏洞及线上修复漏洞
- golang new和make的区别
- Magicodes.IE之导入导出筛选器
- 界面酷炫,功能强大!这款 Linux 性能实时监控工具超好用!老斯机搞它!
- httprunner学习28-yaml文件 参数化读取 csv 文件字符串转 int