博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防盗链与token运用
阅读量:4699 次
发布时间:2019-06-09

本文共 1120 字,大约阅读时间需要 3 分钟。

为什么要防盗链?

例如手机/PC应用,如果有人知道你的api地址,和应用格式,那么他人就可以利用这个接口进行盗链;盗取/盗用里面的数据。

防盗链特性:

1、因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效;

2、因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程;

3、有点接口需要用户登录才能访问;

4、有点接口不需要用户登录就可访问;

现在的接口基本是mvc模式,URL基本是restful风格,URL大体格式如下 

http://test.com/模块名/控制器名/方法名?参数名1=参数值1&参数名2=参数值2&参数名3=参数值3

防盗链方法一 keyword 口令应用:

声明一个keyword 口令,例如'abc',每次请求都要将keyword 推送至服务端,服务端对keyword进行对比,匹配正确后返回data。此方法只适用在手机APP中,因为使用在PC端,很容易被人截取keyword。

例子:http://test.com/模块名/控制器名/方法名?key=keyword

防盗链方法二 url permitted 匹配:

将允许的url保存至数据库中,通过$_SERVER['HTTP_REFERER'] 获取 推送请求者的url,然后与 url permitted 库进行匹配,匹配到后则返回data。此方法只使用于PC网页端,因为手机端没有固定的url。

防盗链方法三 token:

它的职责是保持接口访问的隐蔽性和有效性,保证接口只能给自家人用。

token设计方法有很多,可以自定义算法,下面就介绍一种 MVCrestful 的一种md5 加密算法。 

设计规则:

api_token = md5 ('模块名' + '控制器名' + '方法名' + '2017-04-17' + '加密密钥') = 388b0934e1ec3e0cd50ffe94e152020e

1.2017-04-17 位当天时间

2.'加密密钥' 为私有的加密密钥,手机端需要在服务端注册一个“接口使用者”账号后,系统会分配一个账号及密码,数据表设计参考如下

字段名

字段类型

注释

client_id

varchar(20)

客户端ID

client_secret

varchar(20)

客户端(加密)密钥

 

此方法有效用于所有平台。

防盗链方法四 其他:

实际登录,cookie,session都可以用于做防盗链,只不过不像前面三种那么方便设计与使用。

  

 

   

转载于:https://www.cnblogs.com/peiyu1988/p/6723425.html

你可能感兴趣的文章
分布式系统:向量时钟
查看>>
模板模式(Template Pattern)
查看>>
Raft共识算法
查看>>
excel 去掉 空单元格
查看>>
为Endnote中的期刊名称添加缩写期刊名
查看>>
pdf转换成jpg不清晰怎么办
查看>>
myeclipse An internal error occurred during: "Initialize metrics".
查看>>
WINGIDE 激活失败
查看>>
python安装 错误 “User installations are disabled via policy on the machine”
查看>>
sql server 2008 自动备份
查看>>
Android Studio 开发
查看>>
Oracle 拆分列为多行 Splitting string into multiple rows in Oracle
查看>>
Jsp编写的页面如何适应手机浏览器页面
查看>>
python里面双向队列,列表的属性和方法
查看>>
BZOJ1803Spoj1487 Query on a tree III——主席树
查看>>
C# DataTable和DataRelation
查看>>
关于slf4j+logback整合提供完善log记录的一些总结
查看>>
sqlalchemy根据数据库结构生成映射的实体
查看>>
环形数组的组最大字数组求法
查看>>
SQL命令建表
查看>>