重放攻击拦截使用手册(可选配置)

通常情况下,部署时不需要改动此文档里的配置,用于实际使用中的动态调整

使用场景举例

名词解释:后台配置(使用admin登陆mgr服务后的配置管理模块)
url截取规则:例如请求是http://localhost:8080/portal/upload/mgr/getFileMediaPager.do,则url取值为/upload/mgr/getFileMediaPager.do

A. 使用默认规则

场景:服务刚部署不清楚需要配置哪些接口的规则或者是想体验重放拦截的效果。
此时如果tb_api_replay_rule数据库表中没有/xxx/xxx/xxxx/xx.do的拦截规则,系统会使用后台配置项default_rule_frequency_json中的默认规则,即:每个没有特别指明规则的接口对于每个用户来说,一秒内最多可以访问20次。当然这个参数也是可以改的。

需要的操作:

  1. 将后台配置项is_open_replay_attack_check的值改为true。
  2. 修改配置项secret_replay_rule_version的值,改完点击刷新本机和刷新所有服务按钮。

image.png

B. 标准规则增加单接口拦截规则

在A开启了重放拦截的前提下
场景1:现在需要添加一条对/open/crm/outSourcing/sendVerificationCode.do接口的拦截规则,要求是60秒内同一个手机号cellPhone只能最多发送2次短信。

需要的操作:

  1. 数据库执行插入语句 ``sql INSERT INTOtb_api_replay_rule(url,check_type,check_filed_name,request_num,request_cycle,request_cycle_unit,token_check,version,create_time`) VALUES ( ‘【P1】’, ‘【P2】’, ‘【P3】’, ‘【P4】’, ‘【P5】’, ‘【P6】’, ‘【P7】’, NULL, now());

— 按照下面的解释,最终得到的sql语句是这样的: INSERT INTO tb_api_replay_rule ( url, check_type, check_filed_name, request_num, request_cycle, request_cycle_unit, token_check, version, create_time) VALUES ( ‘/open/crm/outSourcing/sendVerificationCode.do’, ‘3’, ‘cellPhone’, ‘2’, ‘60’, ‘1’, ‘0’, NULL, now());

  1. P1】:替换为要配置规则的接口url,这里替换为/open/crm/outSourcing/sendVerificationCode.do ,注意是【P1】整体替换。<br />【P2】:如果是从请求参数中取手机号,那么这里替换为3,注意是【P2】整体替换。补充:1.cookie cookie中读取 2.header 读取 3.param 参数中读取 4.读取后端管理员 5.读取应用端用户 6.管理员绑定关系用户双重读取。<br />【P3】:保存手机号的字段名,这里替换为cellPhone,注意是【P3】整体替换。<br />【P4】:周期内请求的最大次数,本例中替换为2,注意是【P4】整体替换。<br />【P5】:周期数,与【P6】共同决定时间周期,本例中替换为60,注意是【P5】整体替换。<br />【P6】:时间单位,本例中是秒所以替换为1,注意是【P6】整体替换。补充:时间周期单位 1:秒 2:分 3:小时 4:天 5:月 6:年<br />【P7】:是否校验请求来源(是否为来自云办公),此token由特定接口生成,接口由后台配置项配置(special_interface_create_token),这里替换为0,注意是【P7】整体替换。补充:0表示关闭校验,1表示开启校验。
  2. 2.修改后台配置项secret_replay_rule_version,使得数据库的更改生效,改完配置项记得点击刷新配置。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2656899/1627485535972-c69d2aaa-71dc-4d43-a812-333cc3ccd726.png#clientId=u1d66e8e1-1170-4&from=paste&height=44&id=u934ac61a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=88&originWidth=950&originalType=binary&ratio=1&size=16998&status=done&style=none&taskId=u168a8d70-bfbf-4cf3-a2fa-f0dd056e6dc&width=475)<br />在A开启了重放拦截的前提下<br />场景2:现在需要添加一条对/ptl/learn/live/addLiveComment.do接口的拦截规则,要求是60秒内同一个用户只能最多请求5次。<br />**需要的操作:**
  3. 1. 数据库执行插入语句
  4. ```sql
  5. INSERT INTO `tb_api_replay_rule` ( `url`, `check_type`, `check_filed_name`, `request_num`, `request_cycle`, `request_cycle_unit`, `token_check`, `version`, `create_time`) VALUES ( '【P1】', '【P2】', '【P3】', '【P4】', '【P5】', '【P6】', '【P7】', NULL, now());
  6. -- 按照下面的解释,最终得到的sql语句是这样的:
  7. INSERT INTO `tb_api_replay_rule` ( `url`, `check_type`, `check_filed_name`, `request_num`, `request_cycle`, `request_cycle_unit`, `token_check`, `version`, `create_time`) VALUES ( '/ptl/learn/live/addLiveComment.do', '5', '', '5', '60', '1', '0', NULL, now());

【P1】:替换为要配置规则的接口url,这里替换为/ptl/learn/live/addLiveComment.do ,注意是【P1】整体替换。
【P2】:因为是针对同一个用户,需要获取用户的id,那么这里替换为5,注意是【P2】整体替换。补充:1.cookie cookie中读取 2.header 读取 3.param 参数中读取 4.读取后端管理员 5.读取应用端用户 6.管理员绑定关系用户双重读取。
【P3】:获取用户是后台自动执行,不需要指定字段名,这里替换为空即可,删除【P3】即可,注意是删除,不是空格,注意是【P3】整体删除。
【P4】:周期内请求的最大次数,本例中替换为5,注意是【P4】整体替换。
【P5】:周期数,与【P6】共同决定时间周期,本例中替换为60,注意是【P5】整体替换。
【P6】:时间单位,本例中是秒所以替换为1,注意是【P6】整体替换。补充:时间周期单位 1:秒 2:分 3:小时 4:天 5:月 6:年
【P7】:是否校验请求来源(是否为来自云办公),此token由特定接口生成,接口由后台配置项配置(special_interface_create_token),这里替换为0,注意是【P7】整体替换。补充:0表示关闭校验,1表示开启校验。

  1. 修改后台配置项secret_replay_rule_version,使得数据库的更改生效,改完配置项记得点击刷新配置。

image.png
image.png

单机构限流手册

背景

某些接入机构在某段时间突发的提交大量业务,导致平台资源不足,影响到其他机构用户的使用。此种场景下需要针对机构进行限流,以保证平台的稳定运行。

指定机构全接口重放拦截配置

场景:现在需要对corpId为helloworld的企业单独配置特殊规则,使得该企业的所有成员访问接口的次数总和10秒内最多只能60次。
目前只支持全接口统一特殊配置,不支持指定机构单接口配置
需要的操作:

  1. 将后台配置项is_open_replay_attack_check的值改为true。
  2. 修改后台配置项point_corp_id的值,改为helloworld。
  3. 修改后台配置项max_token_count的值,改为60。
  4. 修改后台配置项refresh_second_count,改为10。
  5. 点击刷新本机配置和刷新所有服务这两个按钮。

image.png