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

 更新时间:2017年04月26日 09:22:33   作者:资源共享  
本篇文章主要介绍了详解PHP防止盗链防止迅雷下载的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

防止盗链:

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

我们在用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动态输出JavaScript代码实例

    PHP动态输出JavaScript代码实例

    这篇文章主要介绍了PHP动态输出JS代码实例,本文直接给出代码实例,一看就懂,简洁明了,需要的朋友可以参考下
    2015-02-02
  • 深入理解php printf() 输出格式化的字符串

    深入理解php printf() 输出格式化的字符串

    下面小编就为大家带来一篇深入理解php printf() 输出格式化的字符串。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • php compact 通过变量创建数组

    php compact 通过变量创建数组

    php compact函数用于创建数组,该函数创建数组比较特殊,compact函数参数将接受一个或多个变量,然后将变量的名称作为该创建数组的索引,变量值作为该创建数组的值,然后返回创建完成的数组。本文章向大家讲解compact函数的基本语法及使用实例。需要的码农可以参考一下。
    2016-11-11
  • smarty模板中拼接字符串的方法

    smarty模板中拼接字符串的方法

    这篇文章主要介绍了smarty模板中拼接字符串的方法,需要的朋友可以参考下
    2014-02-02
  • 用PHP解决的一个栈的面试题

    用PHP解决的一个栈的面试题

    这篇文章主要介绍了用PHP解决的一个栈的面试题,准备面试的高端PHP程序员可以看看,需要的朋友可以参考下
    2014-07-07
  • php实现微信企业转账功能

    php实现微信企业转账功能

    这篇文章主要为大家详细介绍了php实现微信企业转账功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • php使用函数pathinfo()、parse_url()和basename()解析URL

    php使用函数pathinfo()、parse_url()和basename()解析URL

    众所周知在PHP中函数pathinfo()、parse_url()和basename(),这三个都是解析URL的函数,但是也存在一些区别,下面列举了一些实例,通过实例更容易理解这三个函数的使用方法和技巧,有需要的朋友可以参考借鉴,感兴趣的朋友们下面来一起学习学习吧。
    2016-11-11
  • php实现购物车产品删除功能(2)

    php实现购物车产品删除功能(2)

    这篇文章主要为大家详细介绍了php实现购物车产品删除功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • php微信公众号开发之音乐信息

    php微信公众号开发之音乐信息

    这篇文章主要为大家详细介绍了php微信公众号开发之音乐信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Yii框架学习笔记之应用组件操作示例

    Yii框架学习笔记之应用组件操作示例

    这篇文章主要介绍了Yii框架学习笔记之应用组件操作,结合实例形式分析了Yii框架自定义组件的创建与使用相关操作技巧,需要的朋友可以参考下
    2019-11-11

最新评论