如何优雅的实现接口防刷,看过来!!!

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

在我们的app、网站等互联网应用系统中,如果接口直接暴露在外网下,是存在着接口安全问题的。当我们的接口没有任何防刷的措施,就相当于在互联网上裸奔一样!当被一些不怀好意的人利用,那就是发生灾难的时候了!

那应该怎么确保我们的接口安全呢?

通常来说,我们将对外的api接口,做到防重放以及防篡改,这样才能保证我们接口的基本安全!

防重放

防重放又名防复用。也就是我们在收集到一个请求的参数信息后,不做任何修改,将这些参数直接重复请求这个接口。这个时候我们的请求是合法的,毕竟我们的参数都是一致的。

重放带来的2中后果:

1、查询接口:这种后果是比较致命的,甚至可以让你的系统崩溃。重点的攻击对象就是man查询接口,加入一个接口查询是2S,我不对的对你发起查询,就会导致系统的数据库查询阻塞,从而导致系统崩溃

2、新增数据接口:这种攻击方式会造成我们数据库的垃圾数据增加,从而将数据库表撑到崩溃!

针对如上两种后果,我们如果破局呢?

时间戳timetamp

当发起HTTP请求的时候,必须携带一个timestamp参数,然后将这timestamp参数和其他的参数按照一定的规则进行签名。毕竟,一次正常的HTTP请求,从点击发送到服务器处理一般都会在60S内,当服务端收到了这次请求后,先对timestamp参数与当前时间进行比较,假如超过了60S则被判定是为非法请求。

我们的签名就是为了防止攻击者对我们的timestamp人工更改所作的措施,毕竟攻击者从抓包到重放请求已经远超过了60S,这个时候参数中的timestamp已经过期了,如果攻击者更改时间错,则数字签名就会校验失败。因为,攻击者是不知道签名秘钥的。也就无法生成新的签名字符串。

大致流程如下图:

如何优雅的实现接口防刷,看过来!!!

这种方案是有弊端的,就是如果在60S内完成了重放攻击,name我们这种方案是无法得到有效的扼杀的!因为他不能保证请求数据只有一次有效。

时间戳timetamp+nonceStr

这里的nonceStr指的是:仅仅一次有效的随机字符串,每一次请求接口都是不一样的数据。这里给一个方案:随机数+时间戳+用户的唯一信息,拼接后进行哈希处理得到nonceStr。

这个方案的api端处理流程如下:

1、在缓存中查找是否有对应的key,key为nonceStr:{nonceStr}的一个字符串

2、没有这个key的时候,创建key。并且将key的失效时间和timestamp的失效时间设置成一样的。例如:60S

3、假如有这个key,说明这个key在60S内已经调用过接口,那么接口就会被认定为重放,则进行过滤处理!

流程图如下:

如何优雅的实现接口防刷,看过来!!!

这一方案,timestamp和nonceStr两者作为签名的一部分传到了后端,鉴于上面的timestamp方案使得攻击者只能在60S内进行了重放攻击操作,我们有通过了nonceStr随机数进行了60S内只能进行一次接口调用,则保证了我们接口避免重放攻击的漏洞!

防篡改

众所周知,HTTP他是一种无状态的请求协议,api接口并不会知道客户端发送的请求是否为合法请求,而且也不会知道请求携带的参数是否为有效参数。

比如,我们Sass多租户系统中,查询自己店铺的用户数据

http://localhost/api/store/user?store_id=101

这个接口如果被攻击者知道了, 则他可以通过更改门店ID的编码查询任意门店的用户信息。这就不是我们所想要的结果了!

解决方案

1、api接口对请求的参数进行校验,防止攻击者对参数进行更改

流程图如下:

如何优雅的实现接口防刷,看过来!!!

具体步骤如下:

1)、客户端使用提前生成的秘钥对传输参数按照一定的规则进行加密操作,得到签名值,将签名数据作为请求参数,发送给请求接口。

2)、api接口收到客户端的请求后,使用秘钥对请求参数(除了签名值)按照之前约定的规则进行签名,得到签名值

3)、将请求过来的签名值与我们接口生成的签名值进行比较,如果不一致,则认定为非法篡改请求。

2、采用https方式将接口数据进行加密后传输。

欢迎点击下方卡片,关注《coder练习生》文章来源地址https://www.toymoban.com/news/detail-478865.html

到了这里,关于如何优雅的实现接口防刷,看过来!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 接口安全验证及防刷处理方案

    暴露在外网的api接口需要做到 防篡改 和 防重放 才能保证接口安全。 比如:短信验证接口,支付接口,请求时长超过1S以上的 防篡改 我们知道http 是一种无状态的协议,服务端并不知道客户端发送的请求是否合法,也并不知道请求中的参数是否正确。 举个例子, 现在有个充

    2024年01月16日
    浏览(39)
  • 一个注解实现接口幂等性,真心优雅!

    简单来说,就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的,听起来非常容易理解,但要真正的在系统中要始终保持这个目标,是需要很严谨的设计的,在实际的生产环境下,我们应该保证任何接口都是幂等的,而如何正确的实现幂等,就是本文要讨

    2024年02月03日
    浏览(43)
  • AsyncContext优雅实现HTTP长轮询接口

    接到一个需求,实现方案时需要提供一个HTTP接口,接口需要hold住5-8秒,轮询查询数据库,一旦数据库中值有变化,取出变化的值进行处理,处理完成后返回响应。这不就是长轮询吗,如何优雅的实现呢? 在这之前先简单介绍下长连接和短连接 HTTP长链接(Keep-Alive) 概念:

    2024年02月09日
    浏览(39)
  • 【深度思考】如何优雅的实现脱敏?

    最近做了个脱敏的需求,要对系统中的敏感信息,如手机号、车牌号、身份证号、银行卡号等进行脱敏显示。 效果类似下面这样: 简单来说,就是对敏感信息中的某几位进行掩码显示,常见的一般是使用*。 本篇文章就来讲解下在项目中该如何优雅的实现脱敏。 首先,需要

    2024年02月11日
    浏览(35)
  • 如何优雅的实现前端国际化?

    JavaScript 中每个常见问题都有许多成熟的解决方案。当然,国际化 (i18n) 也不例外,有很多成熟的 JavaScript i18n 库可供选择,下面就来分享一些热门的前端国际化库! i18next 是一个用 JavaScript 编写的全面的国际化框架,提供标准的 i18n 功能,包括复数、上下文、插值、格式等。

    2024年01月23日
    浏览(61)
  • SpringBoot如何优雅的实现异步调用?

    Spring Boot 提供了多种方式来实现异步任务,这里介绍三种主要实现方式。 Spring Boot 提供了多种方式来实现异步任务,这里介绍三种实现方式。 @Async 注解是 Spring 提供的一种轻量级异步方法实现方式,它可以标记在方法上,用来告诉 Spring 这个方法是一个异步方法,Spring 会将

    2024年02月07日
    浏览(35)
  • 01、uwsgi、gunicorn如何实现优雅重启

    在实际开发过程中,我们会不断迭代升级产品,每次迭代后,都需要在线上服务器更新代码。一般小公司的迭代升级,是没有做到像金丝雀发布或者使用到kubernetes这些东西的。那如何保证更新的时候,之前接收到的请求能够正常处理完成呢,这个时候就需要实现优雅重启了。

    2023年04月10日
    浏览(40)
  • 【SpringBoot系列】如何优雅地实现异步调用

    1.前言 在现代的应用程序开发中,异步调用是提高系统性能和响应能力的重要手段之一。 Spring Boot作为一个快速开发框架,提供了多种方式来实现异步调用,使得开发者能够更加优雅地处理并发和异步任务。 本文将介绍如何在Spring Boot中实现异步调用的方法和技巧,帮助开发

    2024年02月07日
    浏览(41)
  • 金融用户敏感数据如何优雅地实现脱敏?

    日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。 sensitive 提供了基于注解的方式,并且内置了常见的脱敏方式,便于开发。 为了金融交易的安全性,国家强制规定对于以下信息是要日志脱敏的: 用户名 手机号 邮箱

    2024年02月07日
    浏览(42)
  • SpringBoot如何优雅的实现重试功能

    在有些特定场景,如和第三方对接。 我们调用接口时需要支持重试功能,第一次调用没成功,我们需要等待x秒后再次调用。 通常会设置重试次数,避免业务。 一般我们会这样写 这样写本身,没什么问题。 但是如果多个接口都需要重试的话,代码就不优雅了。 spring系列的

    2024年02月08日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包