zoukankan      html  css  js  c++  java
  • 防盗链之URL参数签名 总结

    一、概述

      传统的 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

  • 相关阅读:
    POJ 1915 简单 广搜题
    poj 2479 最大子数段
    poj 1321 深搜题
    hdu 1024 最大子段和
    .net 学习总结
    [转]SharpDevelop源码分析 (二、主程序+隐藏的初始化)
    工作六年经验分享:软件工程师如何修炼(转)
    Ajax命名空间一个获取指定的页面元素的快捷方式——$get()
    [转]SharpDevelop代码分析 (一、序+基本概念)
    [转]SharpDevelop源码分析 (三、插件系统)
  • 原文地址:https://www.cnblogs.com/chris-cp/p/8012831.html
Copyright © 2011-2022 走看看