这是小小本周的第一篇,

理论

理论主要体现在两个方面,分别是保证数据在传输过程中的安全性,以及数据如何到达服务器端如何获取到数据,如何不被攻击。

数据加密

数据在传输的过程中很容易被抓包,例如通过Http协议的时候,在用户传输数据的时候既然容易被获取,那么就必须进行加密,这里做法是有两种

  1. 对关键字段进行md5加密,

  2. 在http和tcp之间添加一层ssl层,这一层负责数据的加密和解密,即,https。

数据加签

数据加签就是由发送这产生一段无法伪造的数字串,来保证数据在传输过程中不被篡改,

时间戳机制

数据很容易抓包,经过加密,加签处理,这时候已经相当安全了,但是如果有不法者不关心真实的数据,直接拿到数据进行恶意请求,这个时候,需要使用时间戳机制,在每次请求中加入当前的时间,查看时间是否超过五分钟,如果超过五分钟就为非法请求,未超过为合法请求。

AppId机制

网站都需要用户名和密码才能登陆,并不是谁都能使用该网站,对应的对外接口需要实现一种机制,确定谁可以调用,这里使用的是appID + 用户密钥,在调用的接口中增加appID + 密钥在服务器端实现相应的验证。

限流机制

如果出现了频繁调用接口的情况,需要给appID进行限流处理,常用的限流算法有令牌桶和漏斗算法。

黑名单机制

如果appID有非法操作,直接列入黑名单,返回错误码。

数据合法性校验

对数据进行合法校验,例如身份证长度,电话号码长度的组成。

实践

数据加密

主流的加密方式有对称加密和非对称加密。

对称加密

对称加密在加密过程中和解密过程中秘钥是相同的,常见的有DES,AES,优点是计算速度快,缺点是数据在传送前,发送方和接收方都需要确定好秘钥,然后双方都能保存好秘钥, 非对称加密,服务器端生成秘钥,秘钥保存在服务器端,公钥给任何人使用,拿着公钥就可以登录秘钥,缺点过慢。

数据加签

这里使用比较多的为md5算法,多种方式组合成为一个字符串,通过md5生成一段加密字符串。一个简单例子。

str:参数1={参数1}&参数2={参数2}&……&参数n={参数n}$key={用户密钥};
MD5.encrypt(str);

时间戳机制

这里进行时间戳机制 代码如下

long interval=5*60*1000;//超时时间
long clientTime=request.getparameter("clientTime");
long serverTime=System.currentTimeMillis();
if(serverTime-clientTime>interval){return new Response("超过处理时长")
}

AppID 机制

生成一个唯一的AppId即可,密钥使用字母、数字等特殊字符随机生成即可;生成唯一AppId根据实际情况看是否需要全局唯一;但是不管是否全局唯一最好让生成的Id有如下属性:趋势递增:这样在保存数据库的时候,使用索引性能更好;信息安全:尽量不要连续的,容易发现规律;关于全局唯一Id生成的方式常见的有类snowflake方式等;

限流机制

1.令牌桶限流 令牌桶算法的原理是系统以一定速率向桶中放入令牌,填满了就丢弃令牌;请求来时会先从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务;令牌桶允许一定程度突发流量,只要有令牌就可以处理,支持一次拿多个令牌;2.漏桶限流 漏桶算法的原理是按照固定常量速率流出请求,流入请求速率任意,当请求数超过桶的容量时,新的请求等待或者拒绝服务;可以看出漏桶算法可以强制限制数据的传输速度;3.计数器限流 计数器是一种比较简单粗暴的算法,主要用来限制总并发数,比如数据库连接池、线程池、秒杀的并发数;计数器限流只要一定时间内的总请求数超过设定的阀值则进行限流;

具体基于以上算法如何实现,Guava提供了RateLimiter工具类基于基于令牌桶算法:

RateLimiter rateLimiter = RateLimiter.create(5);

以上代码表示一秒钟只允许处理五个并发请求,以上方式只能用在单应用的请求限流,不能进行全局限流;这个时候就需要分布式限流,可以基于redis+lua来实现;

黑名单机制

给用户设置一个初始的状态,正常状态,中间状态,关闭状态等等。

数据合法性校验

合法性校验包括:常规性校验以及业务校验;常规性校验:包括签名校验,必填校验,长度校验,类型校验,格式校验等;业务校验:根据实际业务而定,比如订单金额不能小于0等;

你微微的笑着,不和我说话,我什么都不求,只求你深情的给我来个点赞和分享。我是小小,我们下期再见!

小明菜市场

推荐阅读

● 文末送书 | 数据分析简单入门

● 优雅 | 今天很水的文章-Excel导入导出

● 理论 | 当 Spring Boot 遇上了消息队列......

● 实践 | kafka 基本使用

● 搭建 | 一步成功搭建Centos + Kubernetes 环境

实践 + 理论 | API 接口安全性设计相关推荐

  1. java接口安全怎么处理_Restful API 接口安全性设计

    1.API接口设计规范 2.安全性设计 a.白名单限制 仅接受特定系统的请求响应,调用方的IP地址需要在本系统中报备,否则无法调用 b.合法身份合法性验证 Basic Authentication : ...

  2. post 防篡改_安全|API接口安全性设计(防篡改和重复调用)

    API接口的安全性主要是为了保证数据不会被篡改和重复调用,实现方案主要围绕Token.时间戳和Sign三个机制展开设计. 1. Token授权机制 用户使用用户名密码登录后服务器给客户端返回一个Tok ...

  3. 谈谈API接口安全性设计思路

    作者:道长 www.jianshu.com/p/c6518a8f4040 接口的安全性主要围绕Token.Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看 ...

  4. 简单API接口签名验证设计

    前言 后端在写对外的API接口时,一般会对参数进行签名来保证接口的安全性,在设计签名算法的时候,主要考虑的是这几个问题: 1. 请求的来源是否合法 2. 请求参数是否被篡改 3. 请求的唯一性 我们的 ...

  5. restful 参数带斜杠_SpringCloud实战:Restful架构API接口经典设计误区

    前言 目前微服务架构盛行,发现很多同学设计业务API接口时,写法五花八门.现总结下目前项目上,设计业务API接口的经典误区写法. API接口设计经典误区写法 1.查询某个对象接口: GET /app/ ...

  6. 面试四连问:API 接口如何设计?安全如何保证?防重如何实现?签名如何实现?...

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递 ...

  7. 魔高一丈道高一尺,开放接口安全性设计

    2019独角兽企业重金招聘Python工程师标准>>> 乐猿社区,程序员的花果山 问题 在开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些 ...

  8. API接口幂等性设计

    概念 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果. 例如 1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果: 2. 我们发起一笔付款请求,应该 ...

  9. restful 接口 安全性设计

    2019独角兽企业重金招聘Python工程师标准>>> 1.MD5混淆 第三方调用restful接口时,参数如商品名称.商品ID.金额.MD5加密(商品名称+商品ID+金额+sign ...

最新文章

  1. 美多商城之用户中心(收货地址1)
  2. linux统计文件的个数
  3. 京东开源人脸识别工具包:覆盖最强模型,支持训练跑分
  4. PAT L2-005 集合相似度
  5. JAVA数据类型与逻辑练习
  6. 深度案例 | 纷享销客:用户需求精准洞察下的敏捷开发
  7. jdk下载:各历史版本下载地址
  8. jquery对radio的操作汇总
  9. 解决linux下source /etc/profile关闭终端失效问题
  10. springboot前后端分离后权限原理浅谈
  11. [Usaco2015 dec]Breed Counting
  12. 用java编写程序_用JAVA编写程序
  13. redis hash field过期时间_大佬来告诉你用事半功倍的办法,学习Redis,你觉得它还难吗?...
  14. iOS对象的归档和解档-Runtime实现
  15. 【光学】基于matlab GUI模拟波动光光学系统【含Matlab源码 1064期】
  16. 知了课堂项目初始化数据库 进行数据迁移
  17. AutoRunner学习——下载安装
  18. 先旋转x在旋转y 在旋转z_旋转Kubernetes中的秘密
  19. 【B2B】阿里巴巴汪海:1688成年礼—从中小企业数字化看B2B发展趋势
  20. 教你六步拆解 DDD领域驱动设计落地实践

热门文章

  1. block--内存管理
  2. python基础之玩转(变量赋值)
  3. 《HTML5与CSS3实战指南》——2.3 HTML5常见问题
  4. DDFE 技术周刊(第四期)2016.11.25
  5. LabView中,下拉列表和枚举有什么区别?
  6. Modelsim 后仿真操作步骤之二——用Modelsim单独进行后仿真
  7. 自定义工作流界面开发
  8. Back to back销售订单和drop ship第三方销售订单的销售成本的问题
  9. [Android1.6]横竖屏切换时自动弹出键盘的问题
  10. webrtc 渲染_webRTC 中 timing 信息的使用