基于时间戳防盗链的功能其实每家的CDN都是支持的。主要是通过使用约定的加密字符串来对具有访问有效期的资源链接进行一些加密计算的到一个sign值,然后访问外链里面带上这个sign和截止时间戳去访问CDN的节点,CDN的节点会用同样的算法来计算访问链接是否合法,如果不合法则返回403 Forbidden,否则返回所要访问的资源。

算法说明

基于时间戳的防盗链是通过对时间有关的字符串进行签名,将时间,签名通过一定的方式传递给CDN服务器作为判定依据,CDN边缘节点依据约定的算法判断来访的URL是否有访问权限。

如果通过,执行下一步;

如果不通过,响应 HTTP 状态码 403。

如果同时配置了Referer方式防盗链,UserAgent防盗链,时间戳防盗链,那么如果有其中一项没有通过,那么即响应403。

签名参数

  • T :URL过期的时间,把Unix以秒为单位的时间戳,用16进制的小写字母形式表示。
  • key : 和CDN约定好的加密字符串
  • path:访问资源外链的PATH部分,比如如果访问的外链是http://if-pbl.qiniudn.com/golang.png?v=1那么其中PATH部分就是/golang.png

签名算法

  1. 待签名的原始字符串 s=key+path+T

  2. 签名方式 sign=md5(s).to_lower() ,其中to_lower()表示生成的md5字符串用小写字母表示

签名参数传递方式

例如原始访问外链是:http://if-pbl.qiniudn.com/golang.png?v=1
最终形成的访问外链是:http://if-pbl.qiniudn.com/golang.png?v=1&sign=xxxx&t=xxxx

其中xxxx对应各自的值。

核心代码实现: (其中path可以根据自己的实际情况取出来)

<?php
$path="";
$time = time()+3600;
$T=dechex($time);
$key="xxxx";
$S=$key.$path.$T;
$token = md5($S);
$sign =strtolower($token);
echo $T;
echo $sign;

【七牛云】时间戳防盗链鉴权php实现的更多相关文章

  1. 七牛云 PHP SDK服务器鉴权失败!参数解释

    昨天搞了一下午,用7牛官方的SDK demo 1.上传凭证 $policy = array( 'callbackUrl' => 'http://api.example.com/qiniu/upl ...

  2. 企业证书发布app到七牛云服务

    ---恢复内容开始--- 最近在做企业证书发布app,从申请企业证书,到测试程序发布到七牛云存储.整了几天终于实现了,整理一下资料. 1.首先,申请企业证书. 到苹果开发网站申请企业证书 https: ...

  3. Mongodb 认证鉴权那点事

    [TOC] 一.Mongodb 的权限管理 认识权限管理,说明主要概念及关系 与大多数数据库一样,Mongodb同样提供了一套权限管理机制. 为了体验Mongodb 的权限管理,我们找一台已经安装好的 ...

  4. HTTP协议、时间戳、防盗链的一些概念

    HTTP协议 什么是HTTP协议 (HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准. HTTP是一 ...

  5. Python在七牛云平台的应用(三)简单的人脸识别

    前言 这是最后一篇介绍python在七牛云平台的应用了,因为-前两篇文章第一篇分享了怎么安装七牛的官方库以及怎么对自己的空间进行下载上传,删除等行动.而第二篇则分享了怎么利用七牛的API接口,由于七牛 ...

  6. Python在七牛云平台的应用(二)图片瘦身

    (一)七牛云平台的图片瘦身功能简介:(引用自官网) 针对jpeg.png格式图片 瘦身后分辨率不变,格式不变. 肉眼画质不变. 图片体积大幅减少,节省 CDN 流量 官网给的图片压缩率很高,官网给的「 ...

  7. 七牛云——qshell一个神奇的工具

    前言 qshell是利用七牛文档上公开的API实现的一个方便开发者测试和使用七牛API服务的命令行工具.该工具设计和开发的主要目的就是帮助开发者快速解决问题.目前该工具融合了七牛存储,CDN,以及其他 ...

  8. Go语言实战 - 网站性能优化第一弹“七牛云存储”

    由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云. 整个迁移过程非常平滑,基本上一个小时就完成了.而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有 ...

  9. 七牛云覆盖上传 php

    使用七牛云过程中遇到了需要上传覆盖的情况,最终解决,分享给大家. 七牛云sdk上传示例中是这样写的 <?php require_once 'path_to_sdk/vendor/autoload ...

随机推荐

  1. C语言 · 拿糖果

    算法提高 拿糖果   时间限制:1.0s   内存限制:256.0MB      问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不 ...

  2. pthread_testcancel和pthread_cancel函数的简单示例

    /*0.取消线程 int pthread_cancel(pthread_t thread); 设置取消点 void pthread_testcancel(void); 测试是否接收到取消请求,如果有, ...

  3. Tomcat配置 设置启动参数,点击startup.bat启动

    catalina.batrem ---------------------------------------------------------------------------rem Set J ...

  4. css 3 制作水波状进度条

    效果图如下 : 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  5. 自然语言交流系统 phxnet团队 创新实训 个人博客 (二)

    因为项目用的到条件编译,遂专门记载: 众所周知在C和CPP中可以通过预处理语句来实现条件编译,但是在java中没有预处理语句,我们该如何实现条件编译呢? 这是一个简单的demo public clas ...

  6. 在Mac下结合Xcode搭建Cocos2d-X开发环境!

    第一步:下载cocos2d-X的引擎包,上面已经给出地址了: http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download 第二步:启动终端:(点 ...

  7. 将ORACLE数据库更改为归档模式;写出步骤

    解答:具体步骤如下: 1),以exp方式在线备份数据库到指定位置: 2),观察当前数据库是以服务器参数文件(spfile)方式启动还是以参数文件(pfile)方式启动: SQL> show pa ...

  8. Node.js进程通信模块child_process

    前言 Node.js是一种单线程的编程模型,对Node.js的赞美和诟病的也都是因为它的单线程模型,所有的任务都在一个线程中完成(I/O等例外).单线程模型,不仅让代码非常简洁,更是直接避免了线程调度 ...

  9. php -- php控制linux关机、重启、注销

        php 里面有个 system(exec) 方法, 可以调用系统命令.     重启先建立一个脚本(比喻 /root/reboot_server.sh ),重启用的.//路径可随便,但最少必须 ...

  10. Qt的窗口的最大化。

    1.window.showFullScreen()//此方法只对顶级窗口有效,对子窗口无效 QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示,但是他只对窗 ...