一、概述

  传统的 IP 禁用、referer 防盗链、User-Agent 防盗链、地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链

二、实现

  Token防盗链是通过对时间有关的字符串进行签名,将时间、签名信息通过一定的方式传递给 web server节点服务器作为判定依据,web server节点依据约定的算法判断来访的 URL 是否有访问权限。如果通过,执行下一步;如果不通过,响应 HTTP 403 状态码或者通过 302 跳转到其他 URL。

  1、签名参数

    etime: URL 过期的时间,必须是 UNIX TIME 格式,如:2017/3/9 9:19:0 -> 1489022340

    secret: 和 平台约定的签名密钥,需要在 平台后端管理控制台配置,(服务->  配置 -> 防盗链 -> Token 防盗链);

  2、算法:

    sign = MD5( secret & etime & URI )

    Token = MD5( secret & etime & URI ){ 中间 8 位 } + etime

  假设当前的 UNIX TIME 时间为:1370000000,某图片资源(例如:http://test.example.com/dir/pic.jpg)10 分钟有效,则:

    etime = 1370000000 + 600 = 1370000600

    uri = '/dir/pic.jpg'

    sign = MD5( secret & etime & URI ) = xxxxxxxxxxxxabcdefghyyyyyyyyyyyy

    Token  = MD5( secret & etime & URI ){ 中间 8 位 } + etime = abcdefgh1370000600

  最后经过客户端业务服务器生成的 URL 为:

    http://test.example.com/dir/pic.jpg?token=abcdefgh137000060

 三、验证

  • 根据约定解析取出过期时间,和当前 web Server节点服务器时间进行比较,确认请求是否过期

  • 根据上文约定好的算法计算方式,计算出 MD5 加密串后,和 URL 中的加密串进行比较,验证加密串是否一致

  • 如果以上两个步骤都验证通过,请求才会被认为是合法的,这时 web server 会请求资源响应给客户端,否则会被认为是非法请求,直接响应 HTTP status code 403

防盗链之URL参数签名的更多相关文章

  1. 防盗链之URL参数签名 总结

    一.概述 传统的 IP 禁用.referer 防盗链.User-Agent 防盗链.地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链 二.实现 Token防盗链是 ...

  2. WebApi安全性 参数签名校验(结合Axios使用)

    接口参数签名校验,是WebApi接口服务最重要的安全防护手段之一. 结合项目中实际使用情况,介绍下前后端参数签名校验实现方案. 签名校验规则 http请求,有两种传参形式: 1.通过url传参,最常见 ...

  3. 【转】js生成接口请求参数签名加密

    js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...

  4. js生成接口请求参数签名加密

    js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再 ...

  5. Javascript 获取链接(url)参数的方法

    有时我们需要在客户端获取链接参数,一个常见的方法是将链接当做字符串,按照链接的格式分解,然后获取对应的参数值.本文给出的就是这个流程的具体实现方法. 当然,我们也可以用正则直接匹配,文章中也给出了一个 ...

  6. 正则表达式解析url参数

    解析url参数正则:(?<=\?|&)[\w\={}\\\\,-:'\s'""]*(?=[^#\s]|) 意思是(?<=\?|&) 从?或&符号 ...

  7. 获取移除指定Url参数(原创)

    /// <summary> /// 移除指定的Url参数 /// 来自:http://www.cnblogs.com/cielwater /// </summary> /// ...

  8. 总结:客户端与服务器端使用正则增加URL参数的方法

    先说服务器端的: C#版本 #region URL参数操作 /// <summary> /// URL参数操作 /// </summary> public class UrlP ...

  9. js 获取url参数的值

    //获取url参数函数function GetQueryString(name){    var reg = new RegExp("(^|&)"+ name +" ...

随机推荐

  1. 播放包含flash内容的网页或flash内容, 无法显示相应flash内容

    问题描述 通过Messenger发布的html5网页到player, 如下图所示: 布局播放效果: 解决办法 从Cnario Player菜单栏打开Setting>>Canvas Cont ...

  2. 关联分析中寻找频繁项集的FP-growth方法

    关联分析是数据挖掘中常用的分析方法.一个常见的需求比如说寻找出经常一起出现的项目集合. 引入一个定义,项集的支持度(support),是指所有包含这个项集的集合在所有数据集中出现的比例. 规定一个最小 ...

  3. ArrayList循环遍历并删除元素的几种情况

    如下代码,想要循环删除列表中的元素b,该怎么处理? public class ListDemo { public static void main(String[] args) { ArrayList ...

  4. 总结idea几个实用的快捷键

    Ctrl+R,替换文本Ctrl+F,查找文本 Ctrl+shit+R,全局替换文本Ctrl+shit+F,全局查找文本 Ctrl+Alt+L,格式化代码Alt+Insert,可以生成构造器/Gette ...

  5. Educational Codeforces Round 63 Div. 2

    A:找到两个相邻字符使后者小于前者即可. #include<bits/stdc++.h> using namespace std; #define ll long long #define ...

  6. 洛谷 P4714 「数学」约数个数和 解题报告

    P4714 「数学」约数个数和 题意(假):每个数向自己的约数连边,给出\(n,k(\le 10^{18})\),询问\(n\)的约数形成的图中以\(n\)为起点长为\(k\)的链有多少条(注意每个点 ...

  7. 关于Aop切面中的@Before @Around等操作顺序的说明

    [转]http://www.cnblogs.com/softidea/p/6123307.html 话不多说,直接上代码: package com.cdms.aop.aspectImpl; impor ...

  8. jQuery 为动态添加的元素绑定事件

    在使用jquery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件.像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是 ...

  9. Java第五周学习总结

    学号 2016-2017-2 <Java程序设计>第X周学习总结 教材学习内容总结 1.接口 (1)使用关键字interface来定义一个接口,接口分为接口声明和接口体,例如 interf ...

  10. java 判断语句和循环语句

    一.判断语句:if和switch if(关系表达式1) { 语句体1; }else if (关系表达式2) { 语句体2; }…else { 语句体n+; } switch(表达式) { case 值 ...