PHP防盗链的基本思想&&防盗链的设置方法

  网站盗链会大量消耗被盗链网站的带宽,而真正的点击率也许会很小,严重损害了被盗链网站的利益。本文主要介绍用PHP实现防盗链的方法以及基本思想,希望对你有帮助,一起来看。

  盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。做好防止盗链的工作,是每个网站开发者的重要工作。

  做好防盗链工作能给网站服务器减少不少压力,这里我们分享一种php防盗链的

  实现方法:

  一般的下载的步骤:查找->输出查找结果列表->进入软件详细页面->点击下载按钮->打开下载页面->点击下载,开始下载

  我的方法就是在下载页面做文章

  首先在网站的公共文件里定义一个$key=sdkfjwojf32413这相当于一个密钥一样

  在下载页面生成一个随机数:$certcode = '84615354' (每次打开生成的都不一样)

  然后用以上两个变量和软件的ID生成一个md5()加密串

  然后生成软件的真实下载地址:file.php?id=5&codekey=ksfjwofsdkfsf

  这里的id是软件的编号可以根据他从数据库找到软件地址 $codekey=md5($id.$certcode.$key)

  然后把certcode保存到session里,

  在file.php的参数里面得到的codekey和id再从公共文件里得到$key 再从session里得到$certcode

  对codekey进么验证,看是否正确,如果不正确就退出,否则就进行如下操作

  1、删除session(再次打开这个地址就无效了)

  2、从数据库里读取软件地址,然后读取软件内容,并输出(用PHP的文件读取方法输出要下载的软件内容而不是直接把地址给他下载)

  这样如果要下载,就必须打开你自己的下载页面,从你的下载页面打开地址才能进行下载,而且下载地址每次都不一样,因为生成的随机数不一样

  别的地方就算连到你的下载地址,也是下载不了的。

  拓展阅读(具体实现):

  1.简单防盗链

  $ADMIN[defaulturl] = "http://www.vvschool.cn/404.htm";//盗链返回的地址

  $okaysites = array("http://www.vvschool.cn/","http://www.siyizhu.com"); //白名单

  $ADMIN[url_1] = "http://www.vvschool.cn/temp/download/";//下载地点1

  $ADMIN[url_2] = "";//下载地点2,以此类推

  $reffer = $HTTP_REFERER;

  if($reffer) {

  $yes = 0;

  while(list($domain, $subarray) = each($okaysites)) {

  if (ereg($subarray,"$reffer")) {

  $yes = 1;

  }

  }

  $theu = "url"."_"."$site";

  if ($ADMIN[$theu] AND $yes == 1) {

  header("Location: $ADMIN[$theu]/$file");

  } else {

  header("Location: $ADMIN[defaulturl]");

  }

  } else {

  header("Location: $ADMIN[defaulturl]");

  }?>

  使用方法:将上述代码保存为dao4.php,比如我测试用的validatecode.rar在我的站点里面,则用以下代码表示下载连接.

  文件名?site=1&file=文件

  2.服务器防盗链

  3.软件下载的防盗链方法

  //放置下载软件的根目录相对于当前脚本目录的相对目录

  $fileRelPath = "../../software";

  //例外允许连接的网址,注意:自身域名不需要填入,设定为肯定可以下载,

  // 空字符串("")表示直接输入网址下载的情况

  $excludeReferArr = array("www.wreny.com", "wreny.com");

  chdir($fileRelPath);

  $fileRootPath = getcwd() ."/";

  $filePath=$HTTP_GET_VARS["file"];

  $url=parse_url($_SERVER["HTTP_REFERER"]);

  if($url[host]!=$_SERVER["HTTP_HOST"] && !in_array($referHost, $excludeReferArr)){

  ?>

  其实,反盗链方式也有不少, 这里只列出一个大概思想作为参考:

  (1)IIS 反盗链, 利用ISAPI_Rewrite,可作为Windows下反盗链的一个解决方案;

  (2) 图片反盗链,在图片中加入水印,虽然盗链者可以达到目的,但是却也在为自己的网站做宣传。

  以上就是PHP防盗链的基本思想和设置方法,希望对大家的学习有所帮助。

PHP防盗链的基本思想&&防盗链的设置方法的更多相关文章

  1. PHP做好防盗链的基本思想 防盗链的设置方法

    盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率.受益者不提供资源或提供 ...

  2. Objective-C 链式编程思想

    链式编程思想 链式编程是什么 链式编程就是将调用多个方法用点语法连接起来,让代码更加简洁和可读性更高刚开始接触链式编程是Masonry,用起来真的非常爽 1 make.left.right.top.e ...

  3. iOS 开发之使用链式编程思想实现简单的计算器

    链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好.例如 a(1).b(2).c(3). 链式编程思想最为关键的是,方法的返回值是block,block必须返回对 ...

  4. 什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么?

    什么是作用域链,什么是原型链. 作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域 全局作用域==>函数1作用域==>函数2作用域 作用域的特点就 ...

  5. 设计模式 -- 责任链模式或者叫职责链模式(Chain of Responsibility(CoR))

    什么是链?前后相连,一个连接下一个,其中包括多个节点,其实责任链模式也类似,他是多个对象之间相互关联,下一个对象的操作由上一个对象关联下来,上一个对象有个方法用于指向其他对象.职责链之间的前后关系是可 ...

  6. 未来-区块链-IBM:IBM 区块链技术开发社区

    ylbtech-未来-区块链-IBM:IBM 区块链技术开发社区 1.返回顶部 1. 开始学习 IBM Blockchain 101:开发人员快速入门指南 这篇快速入门指南适合不熟悉区块链技术,希望快 ...

  7. html 音乐 QQ播放器 外链 代码 播放器 外链 代码

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha QQ播放器 外链 代码 播放器 外链 代码 ======== 歌曲链接 QQ播放器 外链 ...

  8. 韩国版微信Kakao推出公链,能否用区块链实现全球扩张?

    2018年是属于区块链的一年,国内外巨头们纷纷布局区块链产业,前不久韩国最大的移动社交平台Kakao集团正式启动了旗下的第一个公链Klaytn的测试网. 此次宣布只是一次试探性举措,旨在对外公布Kla ...

  9. C过程思想,根据需求写方法就行

     实现的方法有多种 Comprehensive orientate 2017/10/27 13:25:07 C过程思想,根据需求写方法就行  

随机推荐

  1. javaScript遍历对象、数组总结(转载)

    javaScript遍历对象.数组总结  转载来源 https://www.cnblogs.com/chenyablog/p/6477866.html 在日常工作过程中,我们对于javaScript遍 ...

  2. C-switch case之如何巧妙判断范围区域

    当判断整数时 示例: 判断整数范围 #include <stdio.h> int main() { unsigned ]={0x00,0x07,0x11,0x60,0x61,0x66}; ...

  3. JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景

    摘要: 理解Web Workers. 原文:JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这 ...

  4. Module的加载实现

    烂笔头开始记录小知识点啦- 浏览器要加载 ES6模块,: <script type="module" src="./foo.js"></scr ...

  5. LintCode Majority Number II / III

    Given an array of integers, the majority number is the number that occurs more than 1/3 of the size ...

  6. h5+js视频播放器控件

    由于h5兼容性问题,很多浏览器对于插入视频播放的支持都大不相同.火狐支持的比较完整,谷歌则支持的不是很好,很多功能都不能实现,这就需要我们去自制一个播放界面,去兼容不同的浏览器. 只插入一个视频时,浏 ...

  7. Django-Oscar小记:如何使用高版本Django开发网页的SEO模块

    在使用Google搜索Django的SEO插件时,很多插件都没有更新到Python3.x,有的插件更新到了Python的高版本,但是不适用于Django的2.x. Django在升级到版本2.x的时候 ...

  8. (后端)Spring Boot自定义错误页面,Whitelabel Error Page处理方式(转)

    我已经是Spring Framework框架的忠实粉丝.对于企业软件开发者来说它提供了对常见问题的通用解决方案,包括那些你在未来开发中没有意识到的问题.但是,它构建的J2EE项目变得比较臃肿,需要被一 ...

  9. javascript的隐式类型转换

    首先简单了解js的typeof,会返回六种类型 即 number string boolen function object undefined 也就是六种基本数据类型 显示类型转换大概有以下几种: ...

  10. SQL Server遗失管理权限账号密码怎么办?

    假如一个SQL Server实例只允许"SQL身份认证"模式登录数据库,而糟糕的是你忘记了sa的密码(sa出于安全考虑应该被禁用,这里仅仅为了描述问题)或其它具有sysadmin角 ...