详解PHP防止盗链防止迅雷下载的方法


Posted in PHP onApril 26, 2017

防止盗链:

原理:当服务器要我们下载文件的时候,我们会拿到一个链接,然后我们通过这个链接找到这个文件,然后将它下载下来。那么也就是说这个链接必须要有的,那么如何防止盗链呢?那就是给你的链接并不是真正的文件链接了。这一点很容易想到,那么不给你真正的链接又怎样让你下载文件呢?

我们在用php做网页的时候,总是会把php代码穿插在HTML代码中间,然后用php去生成剩下的代码,然后传给客户端,也就是说客户端会接受到我们php脚本运行的结果。也就是说:如果我的php脚本运行的结果就是你要下载的文件。这样我们就实现了文件防盗链。就是说你能得到的链接就是这个php文件,然后再由这个百变php文件变成你想要的文件来供你下载。

代码如下:

$FileAddress : 文件的相对路径。
$DownloadName : 文件下载到客户端的名字。
if(file_exists($FileAddress) && $file=fopen($FileAddress,'r')) { //首先要判断文件是否存在,如果文件跟本不存在的话,后边的代码也是白费。
 Header('content-type:application/octet-stream'); //声明文件类型,这里是为了让客户端下载它,而不是打开它,所以声明为未知二进制文件。否则客户端会根据其文件类型在线打开它。
 Header('content-Length:'.filesize($FileAddress)); //声明文件的大小,告诉客户端这个文件的大小,否则客户端下载的时候看不到进度。
 Header('content-disposition:attachment;filename='.$DownloadName); //声明文件名,这里就是告诉客户端它要下载的文件的名字,否则名字就会是你php文件的名字。
 echo fread($file,filesize($FileAddress)); //这里就是将加载的文件echo出来,因此这个php文件不能出现其他任何的文字,就是说这里若是出现了任何其他的输出的话都会输出到客户端下载的文件里。
 fclose($file); //最后关闭句柄。
}

上边这些代码就成功的胜任了防止盗链的任务,只需要定义那两个变量就可以。那两个变量可以通过GET来获取,比如我们将文件实际链接与它的编号在数据库中做一个映射,我们只需要GET到一个文件ID即可对文件进行下载,保证了我们真实文件地址的安全。当然也可以是对文件真实链接进行加密之类的,总之就是不要讲真实链接再放到客户端可以看到的地方就好。

防止迅雷下载

其实通过上边的代码,我们只能做到链接的隐藏,并不能防止客户端用迅雷等工具对其进行下载。那么如何做到防止用迅雷等工具下载它呢?

正如我之前所说我们可以通过各种途径来使php文件得到这个文件的路径,那么,我们只要不要将这些信息加在链接里边就好了。比如:可以通过POST来传输文件的ID,可以通过session来传输文件的ID。

这就是我所说的:花式授权下载。

1.我们可以在下载的前导页写入客户端session,来储存其授权码,将文件ID也储存进去,然后再在下载的php里加入验证session的代码,这样就算客户端将连接输入迅雷下载也是没有用的。

2.我们可以在下载的前导页加入一个隐藏的表单,用POST提交给实现下载功能的php,这样也能达到防止第三方下载工具下载的目的。

总之这样的方法很多,上面两种方法提供参考,主要的思路就是将要下载文件的信息和链接分开来,这样就可以达到只凭一个链接无法下载文件的目的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php知道与问问的采集插件代码
Oct 12 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
UCenter 批量添加用户的php代码
Jul 17 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
php实现PDO中捕获SQL语句错误的方法
Feb 16 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
Mar 09 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 #PHP
ThinkPHP中create()方法自动验证实例
Apr 26 #PHP
PHP使用imagick扩展实现合并图像的方法
Apr 25 #PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 #PHP
php读取XML的常见方法实例总结
Apr 25 #PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 #PHP
PHP中的正则表达式实例详解
Apr 25 #PHP
You might like
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
tagName的使用,留一笔
2006/06/26 Javascript
jQuery 操作XML入门
2008/12/25 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
专科毕业生自我鉴定
2013/12/01 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
单位工作证明书格式
2014/10/04 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
导游词之包公祠
2019/11/25 职场文书