如何设计一个安全的对外接口

这篇具有很好参考价值的文章主要介绍了如何设计一个安全的对外接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 非对称加密:服务端会生成一对密钥,私钥存放在服务器端,公钥可以发布给任何人使用;优点就是比起对称加密更加安全,但是加解密的速度比对称加密慢太多了;广泛使用的是RSA算法;

两种方式各有优缺点,而https的实现方式正好是结合了两种加密方式,整合了双方的优点,在安全和性能方面都比较好;

对称加密和非对称加密代码实现,jdk提供了相关的工具类可以直接使用,此处不过多介绍;

关于https如何配置使用相对来说复杂一些,可以参考本人的之前的文章HTTPS分析与实战

2.数据加签


数据加签就是由发送者产生一段无法伪造的一段数字串,来保证数据在传输过程中不被篡改;你可能会问数据如果已经通过https加密了,还有必要进行加强吗?数据在传输过程中经过加密,理论上就算被抓包,也无法对数据进行篡改;但是我们要知道加密的部分其实只是在外网,现在很多服务在内网中都需要经过很多服务跳转,所以这里的加签可以防止内网中数据被篡改;

2.1 实现措施

数据签名使用比较多的是md5算法,将需要提交的数据通过某种方式组合和一个字符串,然后通过md5生成一段加密字符串,这段加密字符串就是数据包的签名,可以看一个简单的例子:

str:参数1={参数1}&参数2={参数2}&……&参数n={参数n}$key={用户密钥};

MD5.encrypt(str);

注意最后的用户密钥,客户端和服务端都有一份,这样会更加安全;

3.时间戳机制


数据是很容易被抓包的,但是经过如上的加密,加签处理,就算拿到数据也不能看到真实的数据;但是有不法者不关心真实的数据,而是直接拿到抓取的数据包进行恶意请求;这时候可以使用时间戳机制,在每次请求中加入当前的时间,服务器端会拿到当前时间和消息中的时间相减,看看是否在一个固定的时间范围内比如5分钟内;这样恶意请求的数据包是无法更改里面时间的,所以5分钟后就视为非法请求了;

3.1 实现措施

解密后的数据,经过签名认证后,我们拿到数据包中的客户端时间戳字段,然后用服务器当前时间去减客户端时间,看结果是否在一个区间内,伪代码如下:

long interval=5601000;//超时时间

long clientTime=request.getparameter(“clientTime”);

long serverTime=System.currentTimeMillis();

if(serverTime-clientTime>interval){

return new Response(“超过处理时长”)

}

4.AppId机制


大部分网站基本都需要用户名和密码才能登录,并不是谁来能使用我的网站,这其实也是一种安全机制;对应的对外提供的接口其实也需要这么一种机制,并不是谁都可以调用,需要使用接口的用户需要在后台开通appid,提供给用户相关的密钥;在调用的接口中需要提供appid+密钥,服务器端会进行相关的验证;

4.1 实现措施

生成一个唯一的AppId即可,密钥使用字母、数字等特殊字符随机生成即可;生成唯一AppId根据实际情况看是否需要全局唯一;但是不管是否全局唯一最好让生成的Id有如下属性:

  • 趋势递增:这样在保存数据库的时候,使用索引性能更好;

  • 信息安全:尽量不要连续的,容易发现规律;

关于全局唯一Id生成的方式常见的有类snowflake方式等;

5.限流机制


本来就是真实的用户,并且开通了appid,但是出现频繁调用接口的情况;这种情况需要给相关appid限流处理,常用的限流算法有令牌桶和漏桶算法;

5.1 实现措施

常用的限流算法包括:令牌桶限流,漏桶限流**,**计数器限流**

1.令牌桶限流

令牌桶算法的原理是系统以一定速率向桶中放入令牌,填满了就丢弃令牌;请求来时会先从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务;令牌桶允许一定程度突发流量,只要有令牌就可以处理,支持一次拿多个令牌;

2.漏桶限流

漏桶算法的原理是按照固定常量速率流出请求,流入请求速率任意,当请求数超过桶的容量时,新的请求等待或者拒绝服务;可以看出漏桶算法可以强制限制数据的传输速度;

3.计数器限流

计数器是一种比较简单粗暴的算法,主要用来限制总并发数,比如数据库连接池、线程池、秒杀的并发数;计数器限流只要一定时间内的总请求数超过设定的阀值则进行限流;

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

RateLimiter rateLimiter = RateLimiter.create(5);

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

6.黑名单机制


如果此appid进行过很多非法操作,或者说专门有一个中黑系统,经过分析之后直接将此appid列入黑名单,所有请求直接返回错误码;

6.1 实现措施

如何为什么中黑我们这边不讨论,我们可以给每个用户设置一个状态比如包括:初始化状态,正常状态,中黑状态,关闭状态等等;或者我们直接通过分布式配置中心,直接保存黑名单列表,每次检查是否在列表中即可;

7.数据合法性校验


这个可以说是每个系统都会有的处理机制,只有在数据是合法的情况下才会进行数据处理;每个系统都有自己的验证规则,当然也可能有一些常规性的规则,比如身份证长度和组成,电话号码长度和组成等等;

7.1 实现措施

数据合法性校验

合法性校验包括:常规性校验以及业务校验

  • 常规性校验:包括签名校验,必填校验,长度校验,类型校验,格式校验等;

  • 业务校验:根据实际业务而定,比如订单金额不能小于0等;

8. 总结


本文大致列举了几种常见的安全措施机制包括:数据加密、数据加签、时间戳机制、AppId机制、限流机制、黑名单机制以及数据合法性校验;当然肯定有其他方式,欢迎补充。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
如何设计一个安全的对外接口,2024年程序员学习,安全,网络,数据库
如何设计一个安全的对外接口,2024年程序员学习,安全,网络,数据库
如何设计一个安全的对外接口,2024年程序员学习,安全,网络,数据库
如何设计一个安全的对外接口,2024年程序员学习,安全,网络,数据库
如何设计一个安全的对外接口,2024年程序员学习,安全,网络,数据库
如何设计一个安全的对外接口,2024年程序员学习,安全,网络,数据库

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
如何设计一个安全的对外接口,2024年程序员学习,安全,网络,数据库

12899325776)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
[外链图片转存中…(img-lPjaDOja-1712899325776)]文章来源地址https://www.toymoban.com/news/detail-853609.html

到了这里,关于如何设计一个安全的对外接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JWT VS OAuth2, 如何设计一个安全的API接口?

    Client Profile客户端描述 OAuth2框架也指定了集中客户端描述,用来表示应用程序的类型: Web应用 用户代理 原声应用 Authorization Grants认证授权 认证授权代表资源拥有者授权给客户端应用程序的一组权限,可以是下边几种形式: 授权码 隐式授权 资源拥有者密码证书 客户端证书

    2024年04月11日
    浏览(43)
  • 详解--Postman基本使用方法+接口关联+[Python,如何成为杰出的程序员

    安装方法:双击exe文件可以完成安装,简称傻瓜式安装,这里并是说各位,而是指安装方式很简单,直接下一步下一步就好。 进来之后就是这样的了, 这里暂做简介,后续我们也会慢慢讲到其他的功能点。 工具使用 ==== 步骤: 1、复制链接,百度搜索天气,这里只是建议哈

    2024年04月10日
    浏览(51)
  • chatGPT4问世,作为一个程序员应当如何去理解?

    前几年 AI 发展也遇到过许多瓶颈,甚至很多AI投资者因为技术得不到突破而破产。但近几年AI技术飞速发展,特别是今天的主题chatGPT 第一次问世还只是一个帮学生写作业的工具,第二次迭代即可完成大部分市场业务,回答很多刁钻的问题。 有人测试过问chatGPT一些很难以回答

    2023年04月10日
    浏览(60)
  • 一篇文章教会你一个优秀的程序员如何维护好自己的电脑

    我认为程序员的笔记本电脑可以根据不同的特点和用途分为几类 这里介绍的都是些笔记本 以下是一些常见的分类和它们的特点: 轻薄便携笔记本(Ultrabooks) 优点: 便携性 :轻薄设计和轻便重量,适合在不同地方工作。 性能 :虽然不如游戏笔记本那样强大,但在性能和续

    2024年02月14日
    浏览(56)
  • 一个即将30岁Java程序员的自诉,在内卷的大环境之下迷惘的大龄程序员该如何破局?

    不知不觉自己即将步入30岁,到了很多人口中的中年,有时候一直在回想,这些年自己到底做了些什么,留下了些什么? 2015年7月我从一个90%以上的人都不知道的二本院校毕业(软件工程),凭借自学的Android技术,在北京找到了一份月薪7000的工作,在当时其实还算不错,毕竟

    2023年04月09日
    浏览(35)
  • 身为一个后端程序员如何快速制作后端管理系统的UI

    我的专业领域在后端开发上,前端我仅仅是熟悉,但是要从头开发一个前端UI界面有点难为人了。那么身为一个后端程序员我们怎么来开发后端管理系统UI界面呢? 市面上有很多后端管理系统的UI模版,但我推荐的layui + lauyimini,虽然技术偏老,也没咋维护了,但是上手简单呀

    2024年02月11日
    浏览(49)
  • 如何运行黑马程序员redis项目黑马点评(hm-dianping)、常见报错解决与部分接口的测试方法

    hm-dianping项目仓库地址:https://gitee.com/huyi612/hm-dianping 项目对应教学视频:https://www.bilibili.com/video/BV1cr4y1671t?p=24(p24-p95) hm-dianping项目仓库地址:https://gitee.com/huyi612/hm-dianping 以Navicat为例 1、先新建数据库hmdp 2、导入项目中的hmdp.sql文件 配置Mysql 要注意配置文件中默认的mysql配

    2024年01月17日
    浏览(45)
  • 程序实现--对外接口可不仅仅是“给大佬递餐”,前置工作还是要做滴~

    先看下面代码中的两个方法。 execute → doPaymentAuthResultQuery ,一个方法接收到参数后,直接将参数原样传递给另一个方法。 View Code 然后,我们把这段代码稍作改动,主要是变更了第二个被调方法 doPaymentAuthResultQuery 的参数。大家来比较一下,改动前后,哪个更优一些。 View

    2024年02月08日
    浏览(46)
  • 程序实现--对外接口可不仅仅是“给大佬递餐”,前置工作还是要做滴

    先看下面代码中的两个方法。 execute → doPaymentAuthResultQuery ,一个方法接收到参数后,直接将参数原样传递给另一个方法。 View Code 然后,我们把这段代码稍作改动,主要是变更了第二个被调方法 doPaymentAuthResultQuery 的参数。大家来比较一下,改动前后,哪个更优一些。 View

    2024年02月08日
    浏览(38)
  • 如何设计一个牛逼的API接口

    在日常开发中,总会接触到各种接口。前后端数据传输接口,第三方业务平台接口。一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护。这篇文章重点讨论一下提供给第三方平台的业务接口应当如何设计?我们

    2023年04月24日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包