[信息安全]数据安全(反爬虫)之「防重放」策略

一杯糖不加咖啡 一杯糖不加咖啡     2022-12-11     244

关键词:

数据安全(反爬虫)之「防重放」策略

转载:https://mp.weixin.qq.com/s/uwW8riLk1miyy7D6ITw_og

本文将从 API 数据接口的层面讲一种技术方案,实现数据安全。

一、 API 接口请求安全性问题

API 接口存在很多常见的安全性问题,常见的有下面几种情况

即使采用 HTTPS,诸如 Charles、Wireshark 之类的专业抓包工具可以扮演证书颁发、校验的角色,因此可以查看到数据

拿到请求信息后原封不动的发起第二个请求,在服务器上生产了部分脏数据(接口是背后的逻辑是对 DB 的数据插入、删除等)

所以针对上述的问题也有一些解决方案:

HTTPS 证书的双向认证解决抓包工具问题

假如通过网络层高手截获了 HTTPS 加证书认证后的数据,所以需要对请求参数做签名

「防重放策略」解决请求的多次发起问题

请求参数和返回内容做额外 RSA 加密处理,即使截获,也无法查看到明文。

关于 HTTPS 证书双向认证和 Web 端反爬虫技术方案均在大前端时代的安全性一文中有具体讲解。接下来引出本文主角:防重放

二、 请求参数防篡改

在之前的文章也讲过,HTTPS 依旧可以被抓包,造成安全问题。抓包工具下数据依旧是裸奔的,可以查看Charles 从入门到精通文中讲的如何获取 HTTPS 数据。

假如通过网络层高手截获了 HTTPS 加证书认证后的数据,所以需要对请求参数做签名。步骤如下

客户端使用约定好的密钥对请求参数进行加密,得到签名 signature。并将签名加入到请求参数中,发送给服务端

服务端接收到客户端请求,使用约定好的密钥对请求参数(不包括 signature)进行再次签名,得到值 autograph

服务器对比 signature 和 autograph,相等则认为是一次合法请求,否则则认为参数被篡改,判定为一次非法请求

因为中间人不知道签名密钥,所以即使拦截到请求,修改了某项参数,但是无法得到正确的签名 signature,这样构造的一个请求,会被服务器判定为一次非法请求。

三、 防重放策略

在工程师文化中,我们要做一个事情,就首先要对这个事情下个定义。我们才能知道做什么、怎么做。

理论上,一个 API 接口请求被收到,服务会做校验,但是当一个合法请求被中间人拦截后,中间人原封不动得重复发送该请求一次或多次,这种重复利用合法请求进行得攻击被成为重放。

重放会造成服务器问题,所以我们需要针对重放做防重放。本质上就是如何区别去一次正常、合法的请求。

3.1 基于 timestamp 的方案

理论上,客户端发起一次请求,到服务端接收到这个请求的时间,业界判定为不超过60秒。利用这个特征,客户端每次请求都加上 timestamp1,客户端将 timestamp1 和其他请求参数一起签名得到 signature,之后发送请求到服务器。

服务器拿到当前时间戳 timestamp2,timestap2 - timestamp1 > 60s,则认为非法

服务端接收到客户端请求,使用约定好的密钥对请求参数(不包括 signature、timestamp1)进行再次签名,得到值 autograph。比对 signature 和 autograph,若不相等则认为是一次非法请求

假如中间人拦截到请求,修改了 timestamp 或者其他的任何参数,但是不知道密钥,所以服务器依旧判定为非法请求。中间人从抓包、篡改参数、发起请求的过程一般来说大于60秒,所以服务器依旧会判定为非法请求。

基于 timestamp 的设计缺陷也很明显,种种原因下,60秒内的请求,会钻规则漏洞,服务器判定为一次合法请求。

3.2 基于 nonce 的方案

既然时间戳会有漏洞,那么新方案是基于随机字符串 nonce。也就是说每次请求都加入一个随机字符串,然后将其他参数一起利用密钥加密得到签名 signature。服务端收到请求后

先判断 nonce 参数是否能存在于某个集合中,如果存在则认为是非法请求;如果不存在,则将 nonce 添加到当前的集合中

服务端将客户端请求参数(除 nonce)结合密钥加密得到 autograph,将 signature 和 autograph 比对,不相等则认为非法请求

但是该方案也有缺点,因为当次的请求都需要和集合中去搜索匹配,所以该集合不能太大,不然匹配算法特别耗时,接口性能降低。所以不得不定期删除部分 nonce 值。但是这样的情况下,被删除的 nonce 被利用为重放攻击,服务器判定为合法请求。

假设服务器只保存24小时内请求的 nonce,该存储仍旧是一笔不小的开销。

3.3 基于 timestamp + nonce 的方案

根据 timestamp 和 nonce 各自的特点:timestamp 无法解决60秒内的重放请求;nonce 存储和查找消耗较大。所以结合2者的特点,便有了 「timestamp + nonce 的防重放方案」。

利用 timestamp 解决超过60秒被认为非法请求的问题

利用 nonce 解决 timestamp 60秒内的漏网之鱼

步骤:

客户端将当前 timestamp1、随机字符串和其他请求参数,按照密钥,生成签名 signature

服务端收到请求,利用服务端密钥,将除 timestamp1、随机字符串之外的请求参数,加密生成签名 autograph

服务端对比 signature 和 autograph,不相等则认为非法请求

拿到服务端时间戳, timestamp2 - timestamp1 < 60,则判定为一次合法请求,然后保存 nonce

服务端只保存60秒内的 nonce,定时将集合内过期的 nonce 删除

该集合不应该直接操作文件或者数据库,否则服务端 IO 太多,造成性能瓶颈。可以是 mmap 或者其他内存到文件的读写机制。根据场景可以选择乐观锁、悲观锁。

其中有一个 timestamp 的问题,服务器会将请求参数中的 timestamp 判断差值,其中一个致命的缺点是服务器的时间和客户端的时间是存在时间差的,当然你也可以通过校验时间戳解决此问题。时间同步请继续看下面部分。

四、 计算机网络时间同步技术原理

客户端和服务端的时间同步在很多场景下非常重要,举几个例子,这些场景都是经常发生的。

一个商品秒杀系统。用户打开页面,浏览各个类目的商品,商品列表界面右侧和详情页都有倒计时秒杀功能。用户在详情页加购、下单、结算。发现弹出提示“商品库存不足,请购买同类其他品牌商品”

一个答题系统,题目是该公司核心竞争力。所以有心的程序员为接口设计了「防重放」功能。但是前端小哥不给力,接口带过去的 timestamp 与服务器不在一个时区,差好几秒。别有用心的竞品公司的爬虫工程师发现了该漏洞,爬取了题目数据。

所以该现象在计算机领域有非常普遍,有解决方案。

如果精度要求不高的情况下:先请求服务器上的时间 ServerTime,然后记录下来,同时记录当前的时间 LocalTime1;需要获取当前的时间时,用最新的当前时间 (LocalTime2 - LocalTime1 + ServerTime)

拿 iOS 端举例:

App 启动后通过接口获取服务器时间 ServerTime,保存本地。并同时记录当前时间 LocalTime1

需要使用服务器时间时,先拿到当前时间 LocalTime2 - LocalTime1 + ServerTime

若获取服务器时间接口失败,则从缓存中拿到之前同步的结果(初始的时间在 App 打包阶段内置了)

使用 NSSystemClockDidChangeNotification 监测系统时间发生改变,若变化则重新获取接口,进行时同步

如果需要精度更高,比如 100纳秒的情况,则需要使用 NTP(Network Time Protocol)网络时间协议、PTP (Precision Time Protocol)精确时间同步协议了。

如何确保api接口安全呢?

...,然后使用秘钥签名,防止数据被篡改。如果传输不敏感信息,仅仅为了防篡改,可以使用签名;每次HTTP请求,都需要加上timestamp参数,然后把timestamp和其他参数一起进行数字签名。因为一次正常的HTTP请求,从发出到达服务器... 查看详情

防火墙基础之部署安全策略

...网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计... 查看详情

防火墙基础之策略部署

...网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计... 查看详情

移动app测试之安全性测试策略分析

...大部分app还是走的http或者https,所以防http抓包泄露用户信息以及系统自身漏洞是必要的,通过抓包当你查看一个陌生用户信息时,一些手机号,qq等信息页面上应该不显示的,但这些信息不显示并不代表服务器没有下发,好多都 查看详情

关于爬虫与反爬虫简略方案

像安全与黑客从来都是相辅相成一样。爬虫与反爬虫也是在双方程序员的斗智斗勇的过程不断发展和成长的。抓包抓包的目的:分析出协议请求使用的数据,请求接口,参数等等。常用的抓包分析工具:FiddlerCharlesSnifferWireshark具... 查看详情

涉密信息系统处理安全问题

涉密信息系统处理安全问题涉密信息系统安全保密策略是为确保涉密计算机及信息系统安全保密而制定的一系列文档化文件,是涉密信息系统安全保密防护技术和管理措施实施的规范,是涉密信息系统使用人员在使用涉密信息系... 查看详情

如何应对网站反爬虫策略?如何高效地爬大量数据

...不是有效的用户。2、动态页面限制。有时候发现抓取的信息内容空白,这是因为这个网站的信息是通过用户的XHR动态返回内容信息。解决这种问题就要爬虫程序对网站进行分析,找到内容信息并抓取,才能获取内容。3、降低IP... 查看详情

爬虫之ssh证书警告错误

错误信息:错误信息如下:requests.exceptions.SSLError:("badhandshake:Error([(‘SSLroutines‘,‘tls_process_server_certificate‘,‘certificateverifyfailed‘)],)",) 错误分析:  ssh证书是美国网景公司发放的一个安全认证证书,有了这个证书即可证... 查看详情

web安全之insecuredeserialization(代码片段)

...如果您不熟悉反序列化,那么本节将包含一些重要的背景信息,您应该首先熟悉这 查看详情

盘古开源:计算机信息安全中大数据技术的应用策略

...展不断加快,计算机网络的大数据时代来临。人们的信息数据在这一阶段被紧密互联,给实际的网络发展提供了一定动力,但同时其中存在的隐私安全问题也不容忽视。本文从大数据背景及计算机信息安全的概述出发... 查看详情

sparkstreaming源码解读之executor容错安全性(代码片段)

...篇博文的目标是1.Executor的WAL机制详解2.消息重放Kafka数据安全性的考虑:SparkStreaming不断的接收数据,并且不断的产生Job,不断的提交Job给集群运行。所以这就涉及到一个非常重要的问题数据安全性。SparkStreaming是基于... 查看详情

web安全入门-搜索引擎信息

搜索引擎信息搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出指定信息反馈给用户的一门检索技术。搜索引擎依托于多种技术,如网络爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语... 查看详情

sparkstreaming源码解读之executor容错安全性

本期内容:Executor的WAL消息重放 数据安全的角度来考虑整个SparkStreaming:  1、SparkStreaming会不断次序的接收数据并不断的产生Job,不断的提交Job到集群运行,至关重要的问题接收数据安全性  2、由于SparkStreaming是基于SparkCo... 查看详情

如何查看当前数据库的安全策略(代码片段)

目录文档用途详细信息相关文档本文旨在介绍查看当前数据库的安全策略的方法。详细信息使用psql命令或客户端工具,通过管理员用户(企业版V6:默认highgo。安全版:syssso)连接数据库执行selectshow_secure_param();即可查... 查看详情

如何查看当前数据库的安全策略(代码片段)

目录文档用途详细信息相关文档本文旨在介绍查看当前数据库的安全策略的方法。详细信息使用psql命令或客户端工具,通过管理员用户(企业版V6:默认highgo。安全版:syssso)连接数据库执行selectshow_secure_param();即可查... 查看详情

防火墙基础之服务器区的防护策略

...网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。​防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对... 查看详情

iso/iec27017:2015标准信息安全策略

...京广汇联合认证权威专家组,全新诠释ISO/IEC27017:2015标准信息安全策略。标准要求:实施指南客户供应商针对云服务客户的信息安全策略应该定义为针对特定主题的策略。云服务客户的云计算信息安全策略应该与组织对其信息和... 查看详情

(版本定制)第12课:sparkstreaming源码解读之executor容错安全性

... 1、Executor的WAL容错机制  2、消息重放Executor的安全容错主要是数据的安全容错,那为什么不考虑数据计算的安全容错呢?原因是计算的时候SparkStreaming是借助于SparkCore上RDD的安全容错的,所以天然的安全可靠的。Executo... 查看详情