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. 5; XHTML图像

    1.背景图案的设置 2.将图片插入到网页中去 3.用图像作为超链接 4.使用工具建立地图索引 5.切片索引 6.为网站添加图标 5.1 背景图案的设置 格式:<body background=” ...

  2. C# 程序运行进度显示Lable

    public void test() { Thread.Sleep(); string vvv = ""; ; i < ;i++ ) { vvv = vvv +i.ToStr ...

  3. 18.Odoo产品分析 (二) – 商业板块(10) – 电子商务(2)

    查看Odoo产品分析系列--目录 接上一篇Odoo产品分析 (二) – 商业板块(10) – 电子商务(1) 6. 高级属性 除了我们到目前为止已经覆盖基本选项,Odoo在产品页面还提供了一些高级选项 ...

  4. Android 应用程序崩溃日志捕捉

    程序崩溃是应用迭代中不可避免的问题,即使有着5年或者10年经验的程序猿也无法完全保证自己的代码没有任何的bug导致崩溃,现在有一些第三方平台可以帮助我们搜集应用程序的崩溃,比如友盟,详情如下图 虽然能 ...

  5. mac 苹果多版本jdk自由切换

    场景 手头上的工具有时候依赖低版本jdk,有时候需要高版本jdk, 如何在不同版本jdk之间来回自由的切换? 安装 首选需要去官网下载dmg安装包,地址:https://www.oracle.com/ ...

  6. 用户不在 sudoers 文件中,此事将被报告

    在使用Linux系统过程中,通常情况下,我们都会使用普通用户进行日常操作,而root用户只有在权限分配及系统设置时才会使用,而root用户的密码也不可能公开.普通用户执行到系统程序时,需要临时提升权限 ...

  7. struts2从认识到细化了解

    目录 Struts2的介绍与执行流程 介绍: 执行流程: 运行环境搭建 基础示例 Action类的编写 介绍: 访问servlet API 补充: 配置文件 常见配置文件: 常量的配置: struts ...

  8. Tomcat8-windows不能在本地计算机启动tomcat,有更多的信息,查阅系统事件日志。

    tomcat启动不了,也卸载不了. 本人的一个解决方法: 本来jdk和jre是装在g盘的同一个文件夹里的,后来删了他们.再安装的时候jdk安装回原来的地方,jre安装到c盘. 现在需要卸载到他们,重新 ...

  9. c# 建立到数据源的连接 以及获取项目配置文件的属性

    两种连接数据库的写法: <connectionStrings> <add name="HRModelsContainer" connectionString=&q ...

  10. Linux下安装JDK,Tomcat,Mysql详细教程

    1. 概述 今天教大家在linux下安装jdk,mysql以及tomcat.在javaweb开发中,最后完成的项目代码,一般都是布在linux服务器下的.因为linux服务器可以说是安全性稳定性都比w ...