在配置API安全策略前,您需要先创建并维护API资产列表。
新增API
在左侧导航栏中点击“API资产”,进入API资产管理页面。在API定义子页面中,您可以点击“新增API”按钮创建新的API。配置内容包含“基础信息”、“请求Body和参数限制”两部分。
基础信息
基础信息包含“基础配置”、“API端点配置”和“鉴权配置”。
- 基础配置:
- API名称:自定义API的名称,不可与已有的API重名。
- API分组:自定义API的分组名称。
- 所属域名:选择API所归属的域名。
- 备注:填写API的备注信息。
- API端点配置:
- 请求方法:指定API支持的请求方法,如:GET、POST、DELETE、UPDATE等。不在指定的请求方法之内的相关API请求将被认为是非法的。
- API类型:指定API的类型。
- 普通接口:路径中不包含query string参数的普通接口,如:http://www.test.com/api。
- when-case接口:路径中包含query string参数,如:http://www.test.com/api?action=1与http://www.test.com/api?action=2是两个不同的接口。
- 端点路径:指定API的路径。
- 完整匹配:需输入完整路径,示例:/order/v1
- 正则匹配:需输入正则表达式匹配端点路径,示例:/order/*
- 匹配路径参数:开启匹配路径参数后,您可以使用大括号({})来定义端点路径的参数。例如有多个路径参数时,可配置为:/basePath/{pathParam1},{pathParam2},{pathParam3}。配置的路径参数根据其定义的参数名,可前往“请求Body与参数限制”进行进一步的参数合规配置。
- 大小写敏感:指定端点路径是否区分大小写。若大小写敏感,示例:/Order 和 /order为两不同的API路径。
- 鉴权配置:
- 免鉴权:无需对接口进行鉴权认证,进入其他检测流程;
- 秘钥对鉴权:客户端通过网宿默认生成的密钥及算法生成鉴权令牌,可为需验证的鉴权令牌配置具体的参数名称、参数位置及鉴权有效期。
鉴权令牌的生成需客户端配合开发,详见鉴权配置。
请求Body和参数限制
请求Body和参数限制包含“请求Body限制”和“参数限制”。
- 请求Body限制:为请求Body定义合规内容,提供Body最大限制、JSON嵌套层数、JSON参数个数等最大值约束,同时限制请求的Content-Type,控制接收Body的安全范围,防止API收到规模过大的请求。启用后将允许执行请求Body限制, 违反限制的请求将按“API安全”策略下配置的处理动作执行。
- Content-Type:指定请求Body的Content-Type,选择“任意”可允许请求头中携带任意类型content-type;选择“为空不存在”则禁止请求使用任何类型content-type。
- FORM表单:仅允许Content-Type为FORM表单类型,如:application/x-www-form-urlencoded。
- JSON:仅允许Content-Type为JSON的类型,如:application/json。
- 任意:允许请求头中携带任意类型的content-type。
- 为空不存在:禁止请求携带content-type,携带任何类型content-type均为不合法请求。
- Body最大限制(bytes):允许请求Body大小的最大限制,大于此限制的API请求将被认为是非法的。
- 最大嵌套层数:输入允许请求Body中JSON嵌套层数的最大值,大于此限制的API请求将被认为是非法的。
- JSON最大参数个数:输入允许请求body中JSON参数个数的最大值,大于此限制的API请求将被认为是非法的。
- 参数限制:为请求参数定义合规内容,对接口参数名、参数类型、参数范围、是否必带等参数合规性进行精细化校验,有效防止在未知参数的情况下非法调用接口。所有位置的参数默认执行宽松模式,仅检测有配置的参数;Query String参数可特殊定义开启严格模式,需配置完整请求参数。启用后将允许执行请求参数限制, 违反限制的请求将按“API安全”策略下配置的处理动作执行。
- Query String参数检测模式:
- 宽松模式(优先选择):仅检测有配置的部分参数,请求中未配置的参数将不受限制。
- 严格模式(慎重选择):将按照白名单形式严格校验接口中的所有参数,及发起请求的参数必须要在配置的参数列表中,注意需配置接口完整Query String参数。
当“基础信息-API端点配置”中API类型选择为“when-case接口”时,若要启用严格模式,需要将when-case接口路径中的Query String参数作为参数配置到参数限制中,以保障严格模式下参数白名单的完整度,否则会影响严格模式的参数匹配。
在“基础信息-API端点配置”中勾选了需要支持的请求方法后,需要在此为各个请求方法定义参数合规规范。支持定义参数的请求方法有:GET、POST、PUT、HEAD、PATCH、OPTIONS、DELETE。
- 非请求Body参数的定义:
- 参数名称:参数的名称。
- 参数位置:参数出现的位置。支持Http Header、Query String、Cookie和路径参数。
- 参数类型:参数的类型。支持整数、数字、字符串、布尔和枚举。
- 数值范围:当选择“整数”或“数字”时,可以指定数值的范围。数值包含首尾,即[最小值,最大值]。
- 字符长度:当选择“字符串”时,可以指定字符串的长度范围。数值包含首尾,即[最小值,最大值]。当参数值包含中文字符时,选择字符串类型,一个中文字符需配置的长度为3。示例:id=测试,则参数id需配置的长度为6。
- 布尔值:当选择“布尔”时,布尔值默认为“true;flase”。
- 枚举:当选择“枚举”时,可以指定枚举项,枚举字典示例:true;false。
- 必带参数?:当选择“是”时,请求必须携带此参数,未携带此参数的请求则为非法请求。
- 备注:可填写当前参数的备注信息。
- 请求Body参数的定义:开启“Body参数定义”开关以启用此功能,关闭时Body参数的定义将不会生效。支持“Form表单”和“JSON格式定义”两种配置方式。
- Form表单:当选择“Form表单”时,配置方式与“非请求Body参数的定义”一致。
- JSON格式定义:当选择“JSON格式定义”时,需要按照JSON格式定义请求Body的参数格式。
- 参数名称:参数的名称。
- 参数类型:参数的类型。支持整数、数字、字符串、布尔、枚举、数组和JSON对象。根节点仅可选择数组或JSON对象。
- “数值范围”、“字符长度”、“布尔值”、“枚举”和“必带参数?”的配置方式与“非请求Body参数的定义”一致。
当参数类型为“数组”时,需进一步配置数组内参数的具体类型,同一数组内的参数类型需保持一致。比如:当参数类型选择"数组",数组的参数类型配置为"数字"时,则数组内的数据均要满足为“数字”类型。
批量导入API
如果您希望批量导入一批已知的API,那么您可以在“API定义”子页面直接点击“导入API”。在弹窗中,参照引导内容完成API信息的填写,并点击“确认导入”。