帝国cms在页面上会员点播视频时的防盗链鉴权验证思路

时间:2017-05-04 14:17:49

分类:帝国教程

有些朋友的帝国cms网站上会有视频点播功能,但视频地址如何防盗一直是个问题,例如页面上是引用了mp4地址,查看源码即可看到,这样很容易被人盗链。

解决思路:

1、删掉环境中mp4文件的mine类型设定,这样便导致直接访问mp4文件无法访问,因为没有相应的头部声明。

2、通过地址重写功能,将被访问的mp4文件重写到一个验证文件上,mp4地址带有秘钥。

3、验证文件上同样计算秘钥并进行比对,判断时间和其他参数,通过则发送mp4文件头并输出地址。

这样既解决了地址盗链的问题,又无需在地址加密上下功夫,因为无论怎么加密,其实都能够解密出来,也是徒劳。

 解决方法:

一、修改mine,删掉mp4的文件类型

以我们现在的测试环境为例,apache是修改 /conf/mime.types 文件

删掉后需要重启apache环境。

二、修改调用播放地址的位置,输出我们要增加的参数用于验证访问权限。

这里我们需要两个参数,分别为c和t,分别对应“生成的秘钥”和“当前时间戳”

秘钥逻辑为:

code=md5(当前时间戳+用户id+随机符)

我们输出播放地址出的页面做一下处理:

折叠PHP 代码
  1. /* 
  2. 加密方式: 
  3. code=md5(当前时间戳+用户id+随机符,TRUE) 
  4. */  
  5. //随机码  
  6. $tsalt='cmsdx';  
  7. $ttime=time();  
  8. $tuserid=getcvar('mluserid');  
  9. $tstr=$ttime.$tuserid.$tsalt;  
  10. $tcode=md5($tstr);  
  11. echo $trueurl.'?c='.$tcode.'&t='.$ttime;

三、编写验证文件,方式如下,生成秘钥并进行比对。

折叠XML/HTML 代码
  1. <?php  
  2. require('e/class/connect.php');        //引入数据库配置文件和公共函数文件  
  3. require('e/class/db_sql.php');        //引入数据库操作文件  
  4. $link=db_connect();                //连接MYSQL  
  5. $empire=new mysqlquery();        //声明数据库操作类  
  6. /*  
  7. 加密方式:  
  8. code=md5(当前时间戳+用户id+随机符)  
  9. */  
  10. //随机码  
  11. $salt='cmsdx';  
  12. //获取时间戳  
  13. $time=(int)$_GET['t'];  
  14. if(!$time){  
  15.     exit();  
  16. }  
  17. $yztime=$time+1800;  
  18. if($yztime<time()){  
  19.     exit();  
  20. }  
  21. //用户id  
  22. $userid=getcvar('mluserid');  
  23. if(!$userid){  
  24.     exit();  
  25. }  
  26. $str=$time.$userid.$salt;  
  27. //生成秘钥  
  28. $code=md5($str);  
  29. //获取地址中的秘钥  
  30. $ycode=$_GET['c'];  
  31. if(!$ycode){  
  32.     exit();  
  33. }  
  34. if($ycode==$code){  
  35.     $url=$_GET['url'];  
  36.     if(!$url){  
  37.         exit();  
  38.     }  
  39.     header('Content-type: video/mpeg4');  
  40.     header('Content-Disposition: attachment; filename="video.mp4"');//下载后的文件名  
  41.     readfile($url);//文件实际地址  
  42. }  
  43. else{  
  44.     exit();  
  45. }  
  46.   
  47. db_close();                        //关闭MYSQL链接  
  48. $empire=null;                        //注消操作类变量  
  49. ?>  

四、编写伪静态规则,进行地址重写,这时要注意将参数也转过去,下面为apache的规则。

RewriteRule ^(.*).mp4$   verify.php?url=$1.mp4 [QSA]

 

相关文章

相关推荐

为帝国CMS用户提供动力

Copyright © 2016 CmsDX.com All Rights Reserved.