php给视频地址加个Token 防盗链

咔咔猪
2023-04-24 / 0 评论 / 121 阅读

1.jpg

什么是 Token 防盗链

Token 防盗链结合智能标记和公钥加密技术,是业界最安全的防盗链之一。用户可设置签名过期时间来控制文件的访问时限。Token 防盗链的目的是使得每个请求的 URL 都具有一定的“时效性”,因此 URL 本身需要携带过期时间相关的信息,同时确保这个过期时间不能被恶意修改。

Token 防盗链采用 md5 算法,将密文(通常是一个普通字符串)、过期时间、文件路径(过期时间和文件路径通常是有对应关系的,因此也参与 md5 的计算)等信息所计算的 md5 值也加入到 URL中,在验证请求时,除了验证过期时间,同时还会验证该 md5 值是否匹配,对于不匹配的 md5,说明 URL 被篡改,即使请求未过期也需要禁止服务。

播放例子:play.php?vid=1612964711208558592

play.php部分

<?php
$key='kkpig.cn';
$time = date("Y/m/d/H/i"); //如果api改了时间这里也要改
$token = md5($key.$time);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<style type="text/css">
#a1
 {
    background-color:#000000;
    width:100%;
    position:absolute;
    top:0px;
    bottom:0px;
    left:0px;
}
</style>
</head>
<body bgcolor="#000000"><!--bgcolor="#000000"-->
<center>
<div id="a1"></div>
<script type="text/javascript" src="ckplayer/ckplayer.js" charset="utf-8"></script>
<script type="text/javascript">
  
    var flashvars={
        f:'api.php?vid=<?php echo $_GET['vid']."&token=".$token;?>',
        c:0,
        p:1
    };
    var params={bgcolor:'#FFF',allowFullScreen:true,allowScriptAccess:'always',wmode:'transparent'};
    var video=['api.php?vid=<?php echo $_GET['vid']."&token=".$token;?>->video/mp4'];
    CKobject.embed('ckplayer/ckplayer.swf','a1','ckplayer_a1','100%','100%',false,flashvars,video,params);
</script></center>
</body>
</html>

api.php部分

<?php
$key='kkpig.cn';
$time = date("Y/m/d/H/i"); //过期时间
$token = md5($key.$time);
$token2 = $_GET['token'];
$vid = $_GET['vid'];
$api = "https://lens.zhihu.com/api/v4/videos/".$vid."";
$html = file_get_contents($api);
$json = json_decode($html);
$url = $json->playlist->LD->play_url;
if( $token == $token2 )
{ header("Location: {$url}"); } //如果token等于token2 给出完整地址
else{ echo "token错误"; } //不一样给出错误提示
?>
0

评论 (0)

取消