docs: 反爬虫之防重放策略

This commit is contained in:
杭城小刘
2020-02-25 21:21:00 +08:00
parent 47846f9af0
commit b0b7955c46
4 changed files with 77 additions and 35 deletions

View File

@@ -15,7 +15,8 @@ API 接口存在很多常见的安全性问题,常见的有下面几种情况
所以针对上述的问题也有一些解决方案:
1. HTTPS 证书的双向认证解决抓包工具问题
2. 假如通过网络层高手截获了 HTTPS 加证书认证后的数据,所以需要对请求参数做签名
2. 「防重放策略」解决请求的多次发起问题
3. 「防重放策略」解决请求的多次发起问题
4. 请求参数和返回内容做额外 RSA 加密处理,即使截获,也无法查看到明文。
关于 HTTPS 证书双向认证和 Web 端反爬虫技术方案均在[大前端时代的安全性](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.56.md)一文中有具体讲解。接下来引出本文主角:防重放
@@ -96,7 +97,11 @@ API 接口存在很多常见的安全性问题,常见的有下面几种情况
## 四、 计算机网络时间同步技术原理
客户端和服务端的时间同步在很多场景下非常重要,比如秒杀系统(页面打开,各个类目的商品展示倒计时秒杀功能。如果直接请求接口页面数据,然后拿到服务器时间进行倒计时,则会因为网络传输的耗时,导致时间不精确)、接口 timestamp 等
客户端和服务端的时间同步在很多场景下非常重要,举几个例子,这些场景都是经常发生的
- 一个商品秒杀系统。用户打开页面,浏览各个类目的商品,商品列表界面右侧和详情页都有倒计时秒杀功能。用户在详情页加购、下单、结算。发现弹出提示“商品库存不足,请购买同类其他品牌商品”
- 一个答题系统,题目是该公司核心竞争力。所以有心的程序员为接口设计了「防重放」功能。但是前端小哥不给力,接口带过去的 timestamp 与服务器不在一个时区,差好几秒。别有用心的竞品公司的爬虫工程师发现了该漏洞,爬取了题目数据。
所以该现象在计算机领域有非常普遍,有解决方案。
1. 如果精度要求不高的情况下:先请求服务器上的时间 ServerTime然后记录下来同时记录当前的时间 LocalTime1需要获取当前的时间时用最新的当前时间 (LocalTime2 - LocalTime1 + ServerTime)
@@ -109,4 +114,4 @@ API 接口存在很多常见的安全性问题,常见的有下面几种情况
2. 如果需要精度更高,比如 100纳秒的情况则需要使用 NTPNetwork Time Protocol网络时间协议、PTP Precision Time Protocol精确时间同步协议了。
NTP、PTP 不在本文的范畴,不懂得可以查看这篇[文章](https://segmentfault.com/a/1190000005337116)
NTP、PTP 不在本文的范畴,感兴趣的可以查看这篇[文章](https://segmentfault.com/a/1190000005337116)