云控后台接口
接口描述
** 请求格式 **:
请求体采用 json 格式,分页页码从 1 开始计数,分页请求格式如下所示:
{
"page":1,
"perpage":10,
"data":{
"version":"official-101"
}
}
** 分页参数说明 **:
page
页码
perpage
状态描述
data
具体请求参数
** 响应格式 **:
响应采用 json 格式,示例如下:
{
"page": 1,
"perpage": 10,
"total": 1,
"total_page": 1,
"status":0,
"description":"ok",
"data":{
"version":"official-101"
}
}
** 参数说明**:
page
当前页码
perpage
当前每页数量
total
数据共有多少条
total_page
数据共有多少页
status
响应状态码,0 代表成功,非 0 代表有异常
description
请求结果描述,如果 status 为 0 则为 ok,否则为异常信息
data
请求结果具体数据
** 接口类型 **:接口分为两类,一类是为前端服务的前端接口,另一类是为 RASP Agent 服务的 Agent 接口,具体接口格式如下文所示。
Ping 接口
** 描述 **:用来测试后台联通性的通用接口
** 请求方法 **:GET,POST
** 路径 **:v1/ping
** 请求体 **:空
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
Version 接口
** 描述 **:用来获取当前RASP云控后台的版本号
** 请求方法 **:POST
** 路径 **:v1/version
** 请求体 **:空
** 返回结果 **:
{
"data": {
"version": "1.3.5",
"build_time": "2020-09-02 17:35:04",
"commit_id": "055ddf48c789cd776c06c52307c716156b9f6048"
},
"description": "ok",
"status": 0
}
前端接口
认证方式
认证方式分为两种:
登陆之后获取 cookie 认证,cookie字段为 RASP_AUTH_ID,cookie有效期默认 7 天。
通过在请求头中添加静态 token 进行认证,请求头字段为 X-OpenRASP-Token,具体的 token 管理方式,参照下文 token 管理接口。
登录登出接口
登录接口
** 描述 **:登录接口,初始管理后台用户名:openrasp
,密码:admin@123
,登陆成功设置登录 cookie
** 请求方法 **:POST
** 路径 **:v1/user/login
** 请求体 **:
{
"username":"openrasp",
"password":"admin@123"
}
** 参数说明**:
username
String
是
用户名
password
String
是
密码
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
登出接口
** 描述 **: 退出登录状态,清空 cookie
** 请求方法 **:GET
** 路径 **:v1/user/logout
** 请求体 **:无
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
获取是否登录
** 描述 **: 获取当前是否为登录状态
** 请求方法 **:GET
** 路径 **:v1/user/islogin
** 请求体 **:无
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
默认密码判断接口
** 描述 **: 判断当前用户密码是否为默认密码,用于给前端提供是否需要修改密码的提醒
** 请求方法 **:GET,POST
** 路径 **:v1/user/default
** 请求体 **:无
** 返回结果 **:
{
"data": {
"is_default":true,
},
"description": "ok",
"status": 0
}
is_default
是否为默认密码,如果是则为 true,否则为false
更改密码接口
** 描述 **:更改管理员密码,密码长度 8~50 个字节,必须同时包含字母和数组
** 请求方法 **:POST
** 路径 **:v1/user/update
** 请求体 **:
{
"old_password":"admin@123",
"new_password":"admin*123"
}
** 参数说明**:
old_password
String
是
旧密码
new_password
String
是
新密码
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
插件管理接口
上传插件
** 描述** :上传文件为 .js 结尾的插件文件,插件版本在文件第一行,插件名称在插件的第二行
** 请求方法 **:POST
** 路径 **:v1/api/plugin?app_id=c593342c72eb78fc8e7393d0a87b8f3fc54dfbec
** 请求体 **: form data 格式的文件参数,参数名称 plugin
** 参数说明**:
app_id
String
是
APP 唯一标识
plugin
file
是
插件文件,form-data 格式
** 返回结果 **:
{
"data": {
"id": "c593342c72eb78fc8e7393d0a87b8f3fc54dfbec8835250641a6dbd9973ae981b4b7abc4",
"app_id": "c593342c72eb78fc8e7393d0a87b8f3fc54dfbec",
"upload_time": 1542177395622,
"version": "'2018-1025-1600'",
"name": "official",
"md5": "8835250641a6dbd9973ae981b4b7abc4",
"plugin": "/*js plugin content*/",
"algorithm_config": {
"command_other": {
"action": "log"
},
"command_reflect": {
"action": "block"
},
"fileUpload_multipart_script": {
"action": "block"
},
"fileUpload_webdav": {
"action": "block"
}
},
"description": "ok",
"status": 0
}
id
插件唯一标识
app_id
插件所属的 APP
upload_time
上传时间的时间戳
version
插件版本
name
插件名称
md5
插件内容校验和
algorithm_config
插件内的算法配置
plugin
插件内容
下载插件
** 描述 ** :根据插件 id 下载插件
** 请求方法 **:GET
** 路径 **:v1/api/plugin/download?id=47af9da31ec3f233f35a25776f5e06086ebf239ff60a021ada4750b65640d0d24b9ae382
** 请求体 **: 无
** 参数说明**:
id
String
是
插件唯一标识
** 返回结果 **:插件文件,文件名称为 {NAME}-{VERSION}.js,{VERSION} 为插件版本,{NAME}为插件名称
获取插件基本信息
** 描述 ** :根据插件 id 获取插件
** 请求方法 **:POST
** 路径 **:v1/api/plugin/get
** 请求体 **:
{
"id":"47af9da31ec3f233f35a25776f5e06086ebf239ff60a021ada4750b65640d0d24b9ae382"
}
** 参数说明**:
id
String
是
插件唯一标识
** 返回结果 **:
{
"data": {
"id": "7c70d5ba5547e77a6f9ad5d376b92fe7e47da7c4",
"app_id": "fcbc4d8ac6bcaac27b1cc4703e5339a4aa6e8a1c",
"name": "official",
"upload_time": 1546595795342,
"version": "2018-1227-1200",
"md5": "4259002c18ff3a9f40b44e91824ba0cf",
"algorithm_config": {
"xxe_file": {
"action": "log",
"name": "算法2 - 使用 file:// 协议读取文件",
"reference": "https://rasp.baidu.com/doc/dev/official.html#case-xxe"
},
"xxe_protocol": {
"action": "block",
"name": "算法1 - 使用 ftp:// 等异常协议加载外部实体",
"protocols": ["ftp", "dict", "gopher", "jar", "netdoc"]
}
... 忽略
}
},
"description": "ok",
"status": 0
}
id
插件唯一标识
app_id
插件所属的 APP
upload_time
上传时间的时间戳
version
插件版本
name
插件名称
md5
插件内容校验和
algorithm_config
插件内的算法配置
下发算法配置
** 描述 ** :给插件下发插件算法开关配置,下发的算法配置会合并到插件中
** 请求方法 **:POST
** 路径 **:v1/api/plugin/algorithm/config
** 请求体 **:
{
"id":"47af9da31ec3f233f35a25776f5e06086ebf239f3f35a25776f5e06086ebf239f",
"config":{
"xxe_file": {
"action": "log",
"name": "算法2 - 使用 file:// 协议读取文件",
"reference": "https://rasp.baidu.com/doc/dev/official.html#case-xxe"
},
"xxe_protocol": {
"action": "block",
"name": "算法1 - 使用 ftp:// 等异常协议加载外部实体",
"protocols": ["ftp", "dict", "gopher", "jar", "netdoc"]
}
... 忽略
}
}
** 参数说明**:
id
String
是
插件唯一标识
config
object
是
算法配置
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
恢复插件默认算法配置
** 描述 ** :根据插件 id 恢复插件最开始的默认算法配置
** 请求方法 **:POST
** 路径 **:v1/api/plugin/algorithm/restore
** 请求体 **:
{
"id":"47af9da31ec3f233f35a25776f5e06086ebf239ff60a021ada4750b65640d0d24b9ae382"
}
** 参数说明**:
id
String
是
插件唯一标识
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
删除插件
** 描述 ** :根据插件 id 删除插件,无法删除被选中的插件
** 请求方法 **:POST
** 路径 **:v1/api/plugin/delete
** 请求体 **:
{
"id":"47af9da31ec3f233f35a25776f5e06086ebf239ff60a021ada4750b65640d0d24b9ae382"
}
** 参数说明**:
id
String
是
插件唯一标识
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
App管理接口
新增 APP
** 描述 ** :新增一个 APP
** 请求方法 **:POST
** 路径 **:v1/api/app
** 请求体 **:
{
"name":"Java 测试",
"language":"java",
"description":"openrasp protected",
"selected_plugin_id":"47af9da31ec3f233f35a25776f5e0608w6ebf239ff60a021ada4750b65640d0d24b9ae382"
}
** 参数说明**:
name
String
是
APP 名称,名称不能重复
language
String
是
APP 业务语言
description
String
否
APP 描述信息
selected_plugin_id
String
否
APP 下发的插件
** 返回结果 **:
{
"data": {
"id": "1107158fb4cd0a901de850b2c64fab5faf0837d3",
"name": "Java 测试",
"language":"java",
"create_time":1545984191,
"secret":"SFklSJ5_DF125IKn15SDF-1SD141Af1",
"description": "openrasp protected",
"config_time": 0,
"general_config": {
"block.content.html": "</script><script>\n location.href=\"https://rasp.baidu.com/blocked2/?request_id=%request_id%\"\n </script>",
"block.content_json": "{\"error\":true,\"reason\": \"Request blocked by OpenRASP\",\"request_id\": \"%request_id%\"}",
"block.content_xml": "<?xml version=\"1.0\"?>\n\t\t\t\t\t\t\t <doc>\n\t\t\t\t\t\t\t <error>true</error>\n\t\t\t\t\t\t\t <reason>Request blocked by OpenRASP</reason>\n\t\t\t\t\t\t\t <request_id>%request_id%</request_id>\n\t\t\t\t\t\t\t </doc>",
"block.redirect_url": "https://rasp.baidu.com/blocked/?request_id=%request_id%",
"block.status_code": 302,
"body.maxbytes": 4096,
"clientip.header": "ClientIP",
"ognl.expression.minlength": 30,
"plugin.filter": true,
"plugin.maxstack": 100,
"plugin.timeout.millis": 100
},
"whitelist_config": {},
"selected_plugin_id": "",
"email_alarm_conf": {
"enable": false,
"tls_enable": false,
"server_addr": "",
"username": "",
"password": "",
"subject": "",
"recv_addr": []
},
"ding_alarm_conf": {
"enable": false,
"agent_id": "",
"corp_id": "",
"corp_secret": "",
"recv_user": [],
"recv_party": []
},
"http_alarm_conf": {
"enable": false,
"recv_addr": []
},
"attack_type_alarm_conf":null,
"algorithm_config":{}
},
"description": "ok",
"status": 0
}
id
APP 唯一标识
name
APP 名称
description
APP 描述信息
language
APP 使用的编程语言
create_time
APP 创建时间
secret
APP 秘钥,用于和 RASP 通信认证
config_time
上一次下发 RASP 相关配置的时间
general_config
通用配置,用于给 RASP 下发
whitelist_config
拦截白名单配置,用于给 RASP 下发
selected_plugin_id
被选中下发的插件 id
email_alarm_conf
email 报警配置
ding_alarm_conf
钉钉报警配置
http_alarm_conf
http 报警配置
attack_type_alarm_conf
如果没有该配置,那么将会按照所有攻击类型会触发所有的报警方式,配置中的 key 是攻击类型,value 是该类型会触发的报警方式的列表,目前报警方式包括 ding,http,email
algorithm_config
app 当前选中插件的算法配置
删除 APP
** 描述 ** :删除一个 APP ,同时删除该 APP 下所有的 RASP 和插件,当仅剩一个 APP 无法删除,至少保留一个 APP,无法删除还存在在线 RASP 的 APP
** 请求方法 **:POST
** 路径 **:v1/api/app/delete
** 请求体 **:
{
"id":"a8604735911f1866029401c6766ba87f685ff037"
}
** 参数说明**:
id
String
是
APP 唯一标识
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
获取 App
** 描述 ** :获取所有App,或某一个 id 的 app,如果参数中有 id 参数,则返回相应id的 app,如果没有 id 参数,则需要 page 和 perpage 参数来做分页,返回相应数量的 APP 数组
** 请求方法 **:POST
** 路径 **:v1/api/app/get
** 请求体 **:
获取相应 id APP
{
"app_id":"569e8ea7a16123492b5878920fd36985"
}
按照APP名称检索
{
"app_name": "示例"
}
获取一定数量 APP
{
"page":1,
"perpage":10
}
** 参数说明**:
app_id
String
否
APP 唯一标识,有该参数则返回相应 id 的 APP
name
String
否
APP 名称,支持模糊查询
page
int
否
分页页码
perpage
int
否
每页数据条数
** 返回结果 **:
返回相应 id APP
{
"status":0,
"description":"ok",
"data":{
"id":"569e8ea7a16123492b5878920fd36985"
"name":"Java 测试",
"description":"openrasp protected",
"config_time":155536548555,
"create_time":154598419100,
"language":"java",
"general_config":{
"plugin.timeout.millis":500,
"security.enforce_policy":true,
...
}
...
}
}
返回一定数量 APP
{
"status":0,
"description":"ok",
"page": 1,
"perpage": 10,
"total": 1,
"total_page": 1,
"data":[
{
"id":"569e8ea7a16123492b5878920fd36985"
"name":"Java 测试",
"description":"openrasp protected",
"config_time":155536548555,
"create_time":154598419100,
"language":"java",
"general_config":{
"plugin.timeout.millis":500,
"security.enforce_policy":true,
...
}
}
]
}
下发通用配置
描述:给 app 下发 rasp 通用配置
请求方法:POST
路径:v1/api/app/general/config
请求体:
{
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f",
"config": {
"block.content_html": "</script><script>location.href=\"https://rasp.baidu.com/blocked2/?request_id=%request_id%\"</script>",
"block.content_json": "{\"error\":true,\"reason\": \"Request blocked by OpenRASP\",\"request_id\": \"%request_id%\"}",
"block.content_xml": "<?xml version=\"1.0\"?><doc><error>true</error><reason>Request blocked by OpenRASP</reason><request_id>%request_id%</request_id></doc>",
"block.redirect_url": "https://rasp.baidu.com/blocked/?request_id=%request_id%",
"block.status_code": 403,
"body.maxbytes": 12288,
"clientip.header": "ClientIP",
"cpu.usage.enable": false,
"cpu.usage.interval": 5,
"cpu.usage.percent": 90,
"debug.level": 0,
"decompile.enable": false,
"dependency_check.interval": 100,
"fileleak_scan.interval": 21600,
"fileleak_scan.limit": 100,
"fileleak_scan.name": "\\.(git|svn|tar|gz|rar|zip|sql|log)$",
"inject.custom_headers": {
"X-Protected-By": "OpenRASP"
},
"log.maxbackup": 30,
"log.maxburst": 100,
"log.maxstack": 100,
"lru.compare_enable": false,
"lru.compare_limit": 10240,
"lru.max_size": 1000,
"ognl.expression.minlength": 30,
"plugin.filter": true,
"plugin.maxstack": 100,
"plugin.timeout.millis": 100,
"request.param_encoding": "openrasp",
"response.sampler_burst": 5,
"response.sampler_interval": 60,
"security.weak_passwords": [],
"syslog.enable": false,
"syslog.facility": 1,
"syslog.tag": "OpenRASP",
"syslog.url": ""
}
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
config
object
是
通用配置完整内容
** 返回结果 **:返回更新之后的完整 APP 信息
下发白名单配置
** 描述 **:给 app 下发 rasp 白名单配置
** 请求方法 **:POST
** 路径 **:v1/api/app/whitelist/config
** 请求体 **:
{
"app_id":"e64071cf900944b701213a6f17d36e0d18d8b6ab",
"config":[
{
"url":"www.asod.com/sss/sss",
"hook":{
"sql":true,
"ssrf":false
},
"description":""
}
]
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
config
object
是
白名单配置完整内容
** 返回结果 **:返回更新之后的完整 APP 信息
下发报警配置
** 描述 **:给 app 下发报警配置
** 请求方法 **:POST
** 路径 **:v1/api/app/alarm/config
** 请求体 **:
{
"app_id":"47af9da31ec3f233f35a25776f5e06086ebf239f",
"attack_type_alarm_conf":{
"sql":["email","ding","http"],
"xxe":["email"]
},
"email_alarm_conf": {
"enable":false,
"tls_enable":false,
"server_addr":"email.qq.com:445",
"username":"123456789@qq.com",
"password":"4354edfwe",
"subject":"openrasp alarm",
"recv_addr":["165165@163.com"]
},
"ding_alarm_conf": {
"enable":false,
"agent_id":"1s6ef5w1ef6",
"corp_id":"1r5thnb5",
"corp_secret":"d512c5f5fg546sdg5",
"recv_user":["5sdf5","87njy7uoi"],
"recv_party":["8ik44ws"]
},
"http_alarm_conf": {
"enable":false,
"recv_addr":["www.opff.com"]
},
"general_alarm_conf":{
"alarm_check_interval":120
},
"kafka_alarm_conf":{
"url":"1.1.1.1:6666",
"user":"",
"pwd":"",
"enable":true,
"topic":"OpenRASP"
}
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
attack_type_alarm_conf
Object
否
如果没有该配置,那么将会按照所有攻击类型会触发所有的报警方式,配置中的 key 是攻击类型,value 是该类型会触发的报警方式的列表,目前报警方式包括 ding,http,email
email_alarm_conf
Object
否
邮件报警配置
ding_alarm_conf
Object
否
钉钉报警配置
http_alarm_conf
Object
否
http 报警配
email_alarm_conf.enable
bool
否
email 报警开关,默认 false
email_alarm_conf.tls_enable
bool
否
是否打开 邮件 tls 认证,默认 false
email_alarm_conf.server_addr
String
是
邮件服务器地址
email_alarm_conf.username
String
否
邮件账号用户名
email_alarm_conf.password
String
否
邮件账号密码
email_alarm_conf.subject
String
否
邮件主题
email_alarm_conf.recv_addr
String Array
是
邮件报警发送的邮件地址
ding_alarm_conf.enable
bool
否
钉钉报警开关,默认 false
ding_alarm_conf.agent_id
String
是
钉钉报警应用 Agent ID
ding_alarm_conf.corp_id
String
是
钉钉报警的企业 ID
ding_alarm_conf.corp_secret
String
是
钉钉报警的企业秘钥
ding_alarm_conf.recv_user
String Array
否
钉钉报警接收的用户列表,列表每个元素是一个用户的ID,不能和 recv_party 参数同时为空
ding_alarm_conf.recv_party
String Array
否
钉钉报警接收的部门列表,列表每个元素是一个部门的ID,不能和 recv_user 参数同时为空
http_alarm_conf.enable
String
否
HTTP 报警推送开关,默认false
http_alarm_conf.recv_addr
String Array
是
HTTP 报警接收地址列表
general_alarm_conf.alarm_check_interval
Int
是
邮件报警间隔(应用于所有App)
kafka_alarm_conf.url
String
是
kafka服务器的地址
kafka_alarm_conf.user
String
否
kafka服务器的用户名
kafka_alarm_conf.pwd
String
否
kafka服务器的密码
kafka_alarm_conf.enable
Bool
是
是否开启kafka推送
kafka_alarm_conf.topic
String
是
写入kafka的topic名称
** 返回结果 **:返回更新之后的完整 APP 信息
APP 配置接口
** 描述 **:下发 APP 配置,用于配置 APP 名称,语言和描述信息
** 请求方法 **:POST
** 路径 **:v1/api/app/config
** 请求体 **:
{
"app_id":"47af9da31ec3f233f35a25776f5e06086ebf239f",
"name":"myapp",
"language":"php",
"description":"php应用"
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
name
String
是
APP 名称
language
String
是
APP 使用的编程语言
description
String
否
APP 描述信息
** 返回结果 **:返回更新之后的完整 APP 信息
获取 APP 下的所有插件
** 描述 **:根据 APP ID 获取所有的插件内容
** 请求方法 **:POST
** 路径 **:v1/api/app/plugin/get
** 请求体 **:
{
"app_id":"47af9da31ec3f233f35a25776f5e06086ebf239f",
"page":1,
"perpage":15
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
page
int
是
页码
perpage
int
是
单页数量
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 15,
"total": 2,
"total_page": 1,
"data": [
{
"id": "47af9da31ec3f233f35a25776f5e06086ebf239ff60a021ada4750b65640d0d24b9ae382",
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f",
"upload_time": 1540992061040,
"version": "2018-1016-1000",
"md5": "f60a021ada4750b65640d0d24b9ae382"
...
},
{
"id": "47af9da31ec3f233f35a25776f5e06086ebf239f914450bbf9309777723f38facfa8183f",
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f",
"upload_time": 1540979046327,
"version": "2018-1016-0000",
"md5": "914450bbf9309777723f38facfa8183f"
...
}
]
},
"description": "ok",
"status": 0
}
获取 APP 下发的插件
** 描述 **:获取 APP 当前选中的插件,该插件会下发给 APP 下的 RASP
** 请求方法 **:POST
** 路径 **:v1/api/app/plugin/select/get
** 请求体 **:
{
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f"
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data": {
"id": "47af9da31ec3f233f35a25776f5e06086ebf239ff60a021ada4750b65640d0d24b9ae382",
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f",
"upload_time": 1540985045544,
"version": "2018-1016-1000",
"md5": "f60a021ada4750b65640d0d24b9ae382"
...
},
"description": "ok",
"status": 0
}
设置 APP 下发的插件
** 描述 **:设置 APP 下发给 RASP 的插件
** 请求方法 **:POST
** 路径 **:v1/api/app/plugin/select
** 请求体 **:
{
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f",
"plugin_id":"47af9da31ec3f233f35a25776f5e06086ebf239ff60a021ada4750b65640d0d24b9ae382"
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
plugin_id
String
是
插件唯一标识
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
导出APP信息{#export-app}
** 描述 **:导出所有 APP 的ID、Secret等信息
** 请求方法 **:GET
** 路径 **:v1/api/app/export
** 返回结果 **:包含app信息的 json 文件
测试邮件报警
** 描述 **:测试邮件报警
** 请求方法 **:POST
** 路径 **:v1/api/app/email/test
** 请求体 **:
{
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f"
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
测试钉钉报警
** 描述 **:测试钉钉报警
** 请求方法 **:POST
** 路径 **:v1/api/app/ding/test
** 请求体 **:
{
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f"
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
测试 HTTP 报警
** 描述 **:测试 HTTP 报警
** 请求方法 **:POST
** 路径 **:v1/api/app/http/test
** 请求体 **:
{
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f"
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
测试 Kafka 报警
** 描述 **:测试 Kafka 报警
** 请求方法 **:POST
** 路径 **:v1/api/app/kafka/test
** 请求体 **:
{
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f"
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
获取插件更新信息
** 描述 **:如果当前插件是 official.js 的话,判断当前下发插件是否为最新官方插件。如果不是(如 iast.js),返回当前下发插件和最新插件的版本信息
** 请求方法 **:POST
** 路径 **:v1/api/app/plugin/latest
** 请求体 **:
{
"app_id": "47af9da31ec3f233f35a25776f5e06086ebf239f"
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data": {
"is_latest": false,
"selected_version": "2019-0606-1802",
"latest_version": "2019-0606-1803"
},
"description": "ok",
"status": 0
}
is_latest
当前下发插件是否为最新版本
selected_version
当前下发的插件版本
latest_version
最新插件版本
RASP管理接口
搜索 RASP
** 描述 **:按照条件搜索 RASP
** 请求方法 **:POST
** 路径 **:v1/api/rasp/search
** 请求体 **:
{
"page":1,
"perpage":10,
"data": {
"id": "426199dc7a15cce89b0c937a65a24a23",
"app_id": "fcbc4d8ac6bcaac27b1cc4703e5339a4aa6e8a1c",
"version": "1.0.0-RC1",
"hostname": "820c2691f452",
"register_ip": "172.17.0.2",
"language": "java",
"language_version": "1.7.0_17",
"server_type": "tomcat",
"server_version": "7.0.78.0",
"rasp_home": "/tomcat/rasp",
"plugin_version": "2018-1227-1200",
"heartbeat_interval": 180,
"online": false,
"register_time": 1546595808,
"host_type": "docker"
}
}
** 参数说明 **:
id
String
否
RASP 唯一标识
app_id
String
否
所属的 APP 的 ID
version
String
否
RASP 版本
hostname
String
否
RASP 所在的主机名,该字段支持模糊搜索,并同时搜索 hostname 和 register_ip 字段
register_ip
String
否
RASP 访问云控后台所使用的 IP 地址
language
String
否
编程语言
language_version
String
否
语言版本
server_type
String
否
服务器类型
server_version
String
否
服务器版本
rasp_home
String
否
RASP 安装目录
plugin_version
String
否
插件版本
heartbeat_interval
int
否
心跳间隔时间,单位:秒
online
bool
否
是否在线
register_time
int
否
注册时间,毫秒时间戳
host_type
String
否
rasp 所在的主机类型
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 10,
"total": 2,
"total_page": 1,
"data": [
{
"id": "426199dc7a15cce89b0c937a65a24a23",
"app_id": "fcbc4d8ac6bcaac27b1cc4703e5339a4aa6e8a1c",
"version": "1.0.0-RC1",
"hostname": "820c2691f452",
"register_ip": "172.17.0.2",
"language": "java",
"language_version": "1.7.0_17",
"server_type": "tomcat",
"server_version": "7.0.78.0",
"rasp_home": "/tomcat/rasp",
"plugin_version": "2018-1227-1200",
"heartbeat_interval": 180,
"online": false,
"last_heartbeat_time": 1546597790,
"register_time": 1546595808,
"host_type": "docker",
"environ": {
"COLORTERM": "gnome-terminal",
"DISPLAY": ":0",
}
]
},
"description": "ok",
"status": 0
}
id
RASP 唯一标识
app_id
所属的 APP 的 ID
version
RASP 版本
hostname
RASP 所在的主机名,该字段支持模糊搜索,并同时搜索 hostname 和 register_ip 字段
register_ip
RASP 访问云控后台所使用的 IP 地址
language
编程语言
server_type
服务器类型
server_version
服务器版本
rasp_home
RASP 安装目录
plugin_version
插件版本
heartbeat_interval
心跳间隔时间,单位:秒
online
是否在线
last_heartbeat_time
上次心跳时间,毫秒时间戳
register_time
注册时间,毫秒时间戳
host_type
主机类型,例: docker
environ
进程环境变量
RASP版本号统计
** 描述 **:统计RASP每个版本号下主机个数
** 请求方法 **:POST
** 路径 **:v1/api/rasp/search/version
** 请求体 **:
{
"data":{
"app_id":"fcbc4d8ac6bcaac27b1cc4703e5339a4aa6e8a1c",
"version":"1.3.0"
},
"page":1,
"perpage":10
}
** 参数说明 **:
app_id
String
是
所属的 APP 的 ID
version
String
否
指定搜索的版本号
** 返回结果 **:
{
"data": {
"data": [
{
"version": "1.3.0",
"count": 1
}
],
"page": 1,
"perpage": 10,
"total": 1,
"total_page": 1
},
"description": "ok",
"status": 0
}
version
主机版本号
count
主机版本号对应的主机个数
导出 RASP
** 描述 **:按条件搜索 rasp,并把搜索结果导出到 csv 文件,app_id 字段为必选,剩余搜索条件为可选
** 请求方法 **:GET
** 路径 **:v1/api/rasp/csv?app_id=eaGdr22DfthDz51JHF65sd
** 参数说明 **:
app_id
String
是
所属的 APP 的 ID
** 返回结果 **: csv 文件
删除 RASP
** 描述 **:删除指定条件的 RASP,在线的 rasp 不允许删除,当参数中存在 id,删除指定 id 的 rasp 并忽略其他参数
** 请求方法 **:POST
** 路径 **:v1/api/rasp/delete
** 请求体 **:
{
"app_id":"94892d14c8f1dfcedb63af258cc008929c3ef4f5",
"id": "47af9da31ec3f233f35a25776f5e06086ebf239f",
"register_ip":"126.23.3.63",
"expire_time": 604800,
"host_type": "docker"
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
id
String
否
RASP 唯一标识
register_ip
String
否
注册 ip
expire_time
int
否
单位/秒,删除超时时间超过该值的 rasp
host_type
String
否
rasp 所在的主机类型
** 返回结果 **:
{
"data": {
"count":1
},
"description": "ok",
"status": 0
}
count
删除 RASP agent 数量
批量删除 RASP
** 描述 **:根据 rasp id 批量删除rasp
** 请求方法 **:POST
** 路径 **:v1/api/rasp/batch_delete
** 请求体 **:
{
"app_id":"94892d14c8f1dfcedb63af258cc008929c3ef4f5",
"ids": [
"47af9da31ec3f233f35a25776f5e06086ebf239f",
"d64g58d4gc3fs58745sdfgd5g5s7f54e5f4s585s",
"net1d5ns8bad6584thg1s5dnbs8gbs8af5RFG415"
]
}
** 参数说明 **:
app_id
String
是
APP 唯一标识
ids
String Array
是
RASP 唯一标识列表
** 返回结果 **:
{
"data": {
"count":1
},
"description": "ok",
"status": 0
}
count
删除 RASP agent 数量
RASP 备注接口
** 描述 **:给指定 id 的 rasp 添加或者修改备注信息
** 请求方法 **:POST
** 路径 **:v1/api/rasp/describe
** 请求体 **:
{
"id": "47af9da31ec3f233f35a25776f5e06086ebf239f",
"description": "this is a description"
}
** 参数说明 **:
id
String
是
RASP 唯一标识
description
String
是
描述信息
** 返回结果 **:
{
"data": {
},
"description": "ok",
"status": 0
}
类库信息管理接口{#manage-dependency}
类库信息聚合{#aggr-attack-time}
** 描述 **:按照应用下主机聚合主机的类库信息
** 请求方法 **:POST
** 路径 **:v1/api/dependency/aggr
** 请求体 **:
{
"data":{
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a"
},
"page":1,
"perpage":10
}
** 参数说明 **:
app_id
String
是
所属的 APP 的 ID
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 10,
"total": 1,
"total_page": 1,
"data": [
{
@timestamp: 1579597454365,
app_id: "4a335d670ec7c9353d3cf7480e68614dda087ded",
hostname: "d2e69eebfa7b",
id: "d1dd52ff8c82becccf9678b6ed09eca0",
path: ["/tomcat/bin/bootstrap.jar"],
product: "Apache Tomcat Bootstrap",
rasp_count: 1,
rasp_id: "3089c8d2672efd1ef5c3e322d9e8fcb1",
register_ip: "172.17.0.2",
search_string: "Apache Tomcat Bootstrap8.0.5",
source: "manifest_implementation",
tag: "Apache Software Foundation:Apache Tomcat Bootstrap:8.0.5",
vendor: "Apache Software Foundation",
version: "8.0.5"
}
]
},
"description": "ok",
"status": 0
}
timestamp
类库信息上传时间
app_id
所属的APP的ID
hostname
主机名称
id
类库信息唯一标识
path
类库依赖路径
product
产品名称
rasp_count
影响主机数量
rasp_id
类库信息所属的RASP
register_ip
RASP 所在机器 IP 地址
search_string
source
tag
vendor
厂商
version
类库的版本号
类库信息聚合{#search-dependency}
** 描述 **:查看类库信息的详情
** 请求方法 **:POST
** 路径 **:v1/api/dependency/search
** 请求体 **:
{
"data":{
"app_id":"0d46b13c2f25722e542b1a89817e1163e190fce1",
"tag":"org.apache.struts.xwork:xwork-core:2.3.14.2",
"key_word":"",
"hostname":""
},
"page":1,
"perpage":10
}
app_id
String
是
APP 唯一标识
tag
String
key_word
String
否
关键词
hostname
String
否
主机名称
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 10,
"total": 1,
"total_page": 1,
"data": [
{
@timestamp: 1579612005801,
app_id: "0d46b13c2f25722e542b1a89817e1163e190fce1",
hostname: "cq02-scloud-docker-trial",
id: "148f69b483fff233ee4d4f9fffbfd478",
path: ["/tomcat/bin/bootstrap.jar"],
product: "xwork-core",
rasp_count: 1,
rasp_id: "3089c8d2672efd1ef5c3e322d9e8fcb1",
register_ip: "10.58.119.17",
search_string: "Apache Tomcat Bootstrap8.0.5",
source: "manifest_implementation",
tag: "Apache Software Foundation:Apache Tomcat Bootstrap:8.0.5",
vendor: "Apache Software Foundation",
version: "2.3.14.2"
}
]
},
"description": "ok",
"status": 0
}
app_id
所属的APP的ID
timestamp
类库信息上传时间
hostname
主机名称
id
类库信息唯一标识
path
类库依赖路径
product
产品名称
rasp_count
影响主机数量
rasp_id
类库信息所属的RASP
register_ip
RASP 所在机器 IP 地址
search_string
source
tag
vendor
厂商
version
类库的版本号
静态Token管理接口
生成/更新 token
** 描述 **:当有 token 参数为更新,否则为新增 token
** 请求方法 **:POST
** 路径 **:v1/api/token
** 请求体 **:
新增token:
{
"description":"xxx 认证 token"
}
更新token:
{
"token":"44b2b50665c9f11c73090b19c3dd787031611e80",
"description":"啄木鸟微服务认证token"
}
** 参数说明 **:
token
String
是
token 内容
description
String
否
token 描述
** 返回结果 **:
{
"data": {
"token": "44b2b50665c9f11c73090b19c3dd787031611e80",
"description": "扫描器"
},
"description": "ok",
"status": 0
}
获取 token
** 描述 **:获取一定数量的 token 信息
** 请求方法 **:POST
** 路径 **:v1/api/token/get
** 请求体 **:
{
"page":1,
"perpage":10
}
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 10,
"total": 5,
"total_page": 1,
"data": [
{
"token": "349532e57aa36ee9b72a62fec8907109a016f348",
"description": "a token"
},
{
"token": "f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"description": "b token"
}
]
},
"description": "ok",
"status": 0
}
删除token
** 描述 **:删除 token
** 请求方法 **:POST
** 路径 **:v1/api/token/delete
** 请求体 **:
{
"token":"f284baaeb786a8285bd1dde04a3dd7502c766c8a"
}
** 返回结果 **:
{
"data": {
},
"description": "ok",
"status": 0
}
操作日志接口
搜索操作日志
** 描述 **:搜索操作日志
** 请求方法 **:POST
** 路径 **:v1/api/operation/search
** 请求体 **:
{
"data":{
"id": "389fdbeb0aceb154d5d5d26eba28fea9f402c945",
"type_id": 1010,
"app_id": "e64071cf900944b701213a6f17d36e0d18d8b6ab",
"user": "admin",
"ip": "127.0.0.1"
},
"start_time":1,
"end_time":1542807647000,
"page":1,
"perpage":15
}
** 参数说明 **:
data
String
是
所有支持搜索的字段,data 中所有字段皆为可选
start_time
int
是
操作日志的开始时间,毫秒时间戳
end_time
int
是
操作日志的结束时间,毫秒时间戳
** 返回结果 **:
{
"data": {
"data": [
{
"id": "389fdbeb0aceb154d5d5d26eba28fea9f402c945",
"type_id": 1010,
"app_id": "e64071cf900944b701213a6f17d36e0d18d8b6ab",
"time": 1542807647000,
"user": "admin",
"content": "uploaded the plugin: ba41c57afab600c39dba7398987b159d648d0836",
"ip": "127.0.0.1"
}
],
"page": 1,
"perpage": 15,
"total": 1,
"total_page": 1
},
"description": "ok",
"status": 0
}
id
操作日志唯一标识
app_id
所属的 APP 的 ID
type_id
日志类型
time
操作时间
user
操作人
content
操作内容
ip
操作请求发起者相对于云控后台的 IP
服务器管理接口
获取服务器 url
** 描述 **:获取 panel 和 agent 服务器的 url 地址
** 请求方法 **:POST
** 路径 **:v1/api/server/url/get
** 参数 **:无
** 返回结果 **:
{
"data":{
"panel_url":"126.56.23.5:8086",
"agent_url":[
"126.56.23.5:8086",
"10.23.36.122:8086",
"172.23.233.192:8086"
]
},
"description": "ok",
"status": 0
}
panel_url
前端 server url 访问地址
agent_url
agent server 访问地址列表
更改服务器地址
** 描述 **:更改 panel 和 agent 服务器的访问地址
** 请求方法 **:POST
** 路径 **:v1/api/server/url
** 请求体 **:
{
"panel_url":"126.56.23.5:8086",
"agent_urls":[
"126.56.23.5:8086",
"10.23.36.122:8086",
"172.23.233.192:8086"
]
}
** 参数说明 **:
panel_url
String
是
前端 server url 访问地址
agent_url
String Array
否
agent server 访问地址列表
** 返回结果 **:
{
"data":{
"panel_url":"126.56.23.5:8086",
"agent_urls":[
"126.56.23.5:8086",
"10.23.36.122:8086",
"172.23.233.192:8086"
]
},
"description": "ok",
"status": 0
}
清空数据
** 描述 **:清空数据库中的攻击事件、基线报警、异常日志、请求数量、崩溃信息
** 请求方法 **:POST
** 路径 **:v1/api/server/clear_logs
** 请求体 **:
{
"app_id":"e64071cf900944b701213a6f17d36e0d18d8b6ab"
}
** 参数说明 **:
app_id
前端 server url 访问地址
** 返回结果 **:
{
"data": {},
"description": "ok",
"status": 0
}
请求统计接口
请求统计信息聚合
** 描述 **:按照时间聚合 RASP 上传的请求统计数据
** 请求方法 **:POST
** 路径 **:v1/api/report/dashboard
** 请求体 **:
{
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"start_time":1523264521321212,
"end_time":1523267821321000,
"interval":"hour",
"time_zone":"+08:00"
}
** 参数说明 **:
app_id
String
是
需要聚合的 APP
start_time
int
是
开始时间
end_time
int
是
结束时间
interval
String
是
聚合粒度,hour小时,month月,day天
time_zone
String
是
聚合使用的时区
** 返回结果 **:
{
"data":[
{
"start_time":1523264521321212,
"request_sum":10000
},
{
"start_time":1523264521340000,
"request_sum":87
}
],
"description": "ok",
"status": 0
}
start_time
开始时间
request_sum
RASP 处理的请求数量
报警接口
为了降低 es 压力,所有报警接口起止时间不能超过 366 天,聚合接口 size 不能超过1024
按照时间聚合攻击日志
** 描述 **:按照时间聚合攻击数据
** 请求方法 **:POST
** 路径 **:v1/api/log/attack/aggr/time
** 请求体 **:
{
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"start_time":1535600036,
"end_time":1546140836,
"interval":"month",
"time_zone":"+08:00"
}
** 参数说明 **:
app_id
String
是
需要聚合的 APP
start_time
int
是
开始时间
end_time
int
是
结束时间
interval
String
是
聚合粒度,hour小时,month月,day天
time_zone
String
是
聚合使用的时区
** 返回结果 **:
{
"data": {
"data": [
[
0,
0,
0,
1,
0
],
[
0,
0,
0,
0,
0
]
],
"labels": [
1533052800000,
1535731200000,
1538323200000,
1541001600000,
1543593600000
]
},
"description": "ok",
"status": 0
}
data
聚合数据,第一个元素是 info 数据,第二个是 block 数据
labels
聚合的横轴时间标签数组,每个元素都是一个毫秒时间戳
按照类型聚合攻击日志
** 描述 **:按照攻击类型聚合攻击数据
** 请求方法 **:POST
** 路径 **:v1/api/log/attack/aggr/type
** 请求体 **:
{
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"start_time":1535600036,
"end_time":1546140836,
"size":10
}
** 参数说明 **:
app_id
String
是
需要聚合的 APP
start_time
int
是
开始时间
end_time
int
是
结束时间
size
int
是
聚合的攻击类型数目
** 返回结果 **:
{
"data":[
[
"sql", 156
],
[
"xxe", 156
]
],
"description": "ok",
"status": 0
}
data
聚合数据,每个数组代表一种类型,每个数组的第一个元素代表类型名称,第二个元素代表该类型的攻击数量
按照 UA 聚合攻击日志
** 描述 **:按照请求 User-Agent 头聚合攻击数据
** 请求方法 **:POST
** 路径 **:v1/api/log/attack/aggr/ua
** 请求体 **:
{
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"start_time":1535600036,
"end_time":1546140836,
"size":10
}
** 参数说明 **:
app_id
String
是
需要聚合的 APP
start_time
int
是
开始时间
end_time
int
是
结束时间
size
int
是
聚合的 UA 类型数目
** 返回结果 **:
{
data:[
[
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36", 156
],
[
"Chrome/5.0 (X11; Linux x86_64) AppleWebKit/537.36", 156
]
],
"description": "ok",
"status": 0
}
data
聚合数据,每个数组代表一种类型,每个数组的第一个元素代表 UA 名称,第二个元素代表该 UA 的攻击数量
漏洞聚合搜索
** 描述 **:按照漏洞聚合攻击数据(不同的栈为不同的漏洞)
** 请求方法 **:POST
** 路径 **:v1/api/log/attack/aggr/vuln
** 请求体 **:
{
"data":{
"attack_type":["directory","sql"],
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"start_time":1523264521321,
"end_time":1523264521421
}
"page":1,
"perpage":10
}
** 参数说明 **:
app_id
String
否
漏洞所属的 APP,如果有该参数,那么统计相应的 app 数据,如果没有,则统计所有的数据
attack_type
String Array
否
攻击类型可以多选,数组为空则什么都不返回,没有该参数,或者参数为null,则不过滤此参数
rasp_id
String
否
漏洞所属的 RASP
server_hostname
String
否
漏洞发生的机器的 hostname
attack_source
String
否
攻击来源 ip
url
String
否
攻击的 url
intercept_state
String Array
否
拦截状态,可选值:block、info,数组为空则什么都不返回,没有该参数,或者参数为null,则不过滤此参数
local_ip
String
否
攻击的机器的 ip
start_time
int
是
开始时间
end_time
int
是
结束时间
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 10,
"total": 500,
"total_page": 50,
"data":[
{
"attack_type":"directory",
"stack_md5":"1111121637821204cwwd2e52d62d0aa8",
"event_time":"2019-01-27T23:51:15+0800",
...
}
...
]
},
"description": "ok",
"status": 0
}
data
漏洞聚合结果,结果按照每个漏洞的最新的攻击时间排序,每个漏洞展示的内容都是该漏洞最新的一个攻击的内容
攻击报警搜索
** 描述 **:搜索攻击日志,结果结果按照时间降序排序
** 请求方法 **:POST
** 路径 **:v1/api/log/attack/search
** 请求体 **:
{
"data":{
"attack_type":["directory","sql"],
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"start_time":"1523264521321",
"end_time":"1523264521421"
}
"page":1,
"perpage":10
}
** 参数说明 **:
app_id
String
否
所属的 APP,如果有该参数,那么统计相应的 app 数据,如果没有,则统计所有的数据
attack_type
String Array
否
攻击类型可以多选,数组为空则什么都不返回,没有该参数,或者参数为null,则不过滤此参数
rasp_id
String
否
所属的 RASP
server_hostname
String
否
攻击发生的机器的 hostname 或者 IP,支持模糊搜索
attack_source
String
否
攻击来源 ip,支持模糊搜索
url
String
否
攻击的 url,包含搜索,支持模糊搜索
intercept_state
String Array
否
拦截状态,可选值:block、info,数组为空则什么都不返回,没有该参数,或者参数为null,则不过滤此参数
local_ip
String
否
攻击的机器的 ip
request_id
String
否
请求 id
stack_md5
String
否
攻击栈的 MD5
plugin_message
String
否
插件返回的监测信息,支持模糊搜索
start_time
int
是
开始时间
end_time
int
是
结束时间
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 10,
"total": 500,
"total_page": 50,
"data":[
{
"attack_type":"directory",
"intercept_state":"block",
"plugin_confidence":100
...
}
...
]
},
"description": "ok",
"status": 0
}
data
搜索攻击结果
崩溃报警搜索{#search-crash-alarm}
** 描述 **:搜索崩溃日志,结果结果按照时间降序排序。支持按照主机名称、报警信息和报警时间进行检索
** 请求方法 **:POST
** 路径 **:v1/api/log/crash/search
** 请求体 **:
{
"data":{
"_id": "3456789cb45678",
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"start_time":"1523264521321",
"end_time":"1523264521421",
"hostname": "127.0.0.1",
"language": "java",
"rasp_id": "3089c8d2672efd1ef5c3e322d9e8fcb1",
"crash_message": "crash"
},
"page":1,
"perpage":10
}
** 参数说明 **:
_id
String
否
崩溃信息ID,用于区分不同的崩溃信息
app_id
String
否
所属的 APP,如果有该参数,那么统计相应的 app 数据,如果没有,则统计所有的数据
hostname
String
否
该字段可以多选,数组为空则什么都不返回,没有该参数,或者参数为null,则不过滤此参数
rasp_id
String
否
所属的 RASP
language
String
否
RASP 使用的开发语言
crash_message
String
否
崩溃报警信息,支持模糊搜索
start_time
int
是
开始时间
end_time
int
是
结束时间
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 10,
"total": 500,
"total_page": 50,
"data":[
{
"language":"PHP",
... // 此处省略
},
... // 此处省略
]
},
"description": "ok",
"status": 0
}
data
搜索基线结果
基线报警搜索
** 描述 **:搜索基线日志,结果结果按照时间降序排序
** 请求方法 **:POST
** 路径 **:v1/api/log/policy/search
** 请求体 **:
{
"data":{
"policy_id":["3004","3003"],
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"server_hostname":"nmg01.xx.cq",
"local_ip":"172.36.2.6",
"start_time":"1523264521321",
"end_time":"1523264521421"
},
"page":1,
"perpage":10
}
** 参数说明 **:
app_id
String
否
所属的 APP,如果有该参数,那么统计相应的 app 数据,如果没有,则统计所有的数据
policy_id
int Array
否
该字段可以多选,数组为空则什么都不返回,没有该参数,或者参数为null,则不过滤此参数
rasp_id
String
否
所属的 RASP
server_hostname
String
否
机器的 hostname 或者 IP,支持模糊搜索
local_ip
String
否
机器的 ip
message
String
否
基线报警信息,支持模糊搜索
start_time
int
是
开始时间
end_time
int
是
结束时间
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 10,
"total": 500,
"total_page": 50,
"data":[
{
"policy_id":"3004",
... // 此处省略
},
... // 此处省略
]
},
"description": "ok",
"status": 0
}
data
搜索基线结果
异常接口
搜索异常信息
** 描述 **:根据条件搜索异常信息
** 请求方法 **:POST
** 路径 **:v1/api/log/error/search
** 请求体 **:
{
"data":{
"app_id":"f284baaeb786a8285bd1dde04a3dd7502c766c8a",
"server_hostname":"nmg01.xx.cq",
"local_ip":"172.36.2.6",
"start_time":"1523264521321",
"end_time":"1523264521421"
},
"page":1,
"perpage":10
}
** 参数说明 **:
app_id
String
否
所属的 APP,如果有该参数,那么统计相应的 app 数据,如果没有,则统计所有的数据
rasp_id
String
否
攻击所属的 RASP 的 ID
server_hostname
String
否
机器的 hostname 或 IP ,支持模糊搜索
local_ip
String
否
机器的 ip
message
String
否
搜索异常信息包含该值的异常日志,支持模糊搜索
start_time
int
是
开始时间
end_time
int
是
结束时间
** 返回结果 **:
{
"data": {
"page": 1,
"perpage": 10,
"total": 500,
"total_page": 50,
"data":[
{
"message": "HTTP request to http://scloud.baidu.com:8086/v1/agent/rasp failed:",
"server_nic": [{
"name": "en0",
"ip": "172.24.182.127"
}],
"stack_trace": "sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)",
"level": "WARN",
"event_time": "2019-01-11T13:36:46+0800",
"app_id": "9b3554a97673f1f8f5c929310298037a660d3b7a",
"pid": 58353,
"server_hostname": "localhost",
"rasp_id": "3089c8d2672efd1ef5c3e322d9e8fcb1"
}
]
},
"description": "ok",
"status": 0
}
data
搜索错误日志结果
RASP接口
认证方式
增加 APP ID 请求头: X-OpenRASP-AppID: 9b3554a97673f1f8f5c929310298037a660d3b7a
增加 APP Secret 请求头: X-OpenRASP-AppSecret: 2wMG8K9F71CZyvlWu1CRwf7tVDVW7Ud4gxCY5X4aMzO
RASP 注册接口
** 描述 **:注册 RASP 基本信息,如果有 id 参数,那么为更新相应的 RASP 信息,否则为新增 RASP
** 请求方法 **:POST
** 路径 **:v1/agent/rasp
** 请求体 **:
{
"id":"569e8ea7a16123492b5878920fd36985",
"version" :"v3.2",
"hostname":"tyy-OptiPlex-9020",
"register_ip":"127.56.23.4",
"language" :"java",
"language_version":"8.1" ,
"server_type":"tomcat",
"server_version":"8.5.1" ,
"heartbeat_interval":60,
"rasp_home":"/home/work/tomcat8/rasp",
"host_type":"docker",
"environ":{
"JAVA_HOME":"/home/java/jdk-7.0.25"
}
}
** 参数说明 **:
id
String
是
RASP 唯一标识
version
String
是
RASP 版本
hostname
String
是
RASP 所在机器的主机名
register_ip
String
是
RASP 所在机器 IP 地址
language
String
是
RASP 使用的开发语言
language_version
String
是
RASP 使用的开发语言版本
server_type
String
是
RASP 使用的服务器种类
server_version
String
是
RASP 使用的服务器版本号
heartbeat_interval
int
是
心跳间隔时间,单位:秒
rasp_home
String
否
RASP 安装目录
host_type
String
否
主机类型,如 docker
environ
String
否
服务进程环境变量
** 返回结果 **:
{
"status":0,
"description":"ok",
"data":{
"id":"569e8ea7a16123492b5878920fd36985",
"app_id":"023e68ea7a12564492b5878920fd630c8",
"version" :"v3.2",
"hostname":"tyy-OptiPlex-9020",
"register_ip":"127.56.23.4",
"language" :"java",
"language_version":"8.1" ,
"server_type":"tomcat",
"server_version":"8.5.1" ,
"heartbeat_interval":60,
"rasp_home" :"/home/work/tomcat8/rasp",
"last_heartbeat_time":"15425645253",
"online":true,
"host_type":"docker",
"plugin_version":"",
"plugin_name":"",
"plugin_md5":"",
"environ":{
"JAVA_HOME":"/home/java/jdk-7.0.25"
},
"register_time":"15425645253"
}
}
** 参数说明 **:
id
RASP 唯一标识
app_id
所属 APP 标识
version
RASP 版本
hostname
RASP 所在机器的主机名
register_ip
RASP 所在机器 IP 地址
language
RASP 使用的开发语言
language_version
RASP 使用的开发语言版本
server_type
RASP 使用的服务器种类
server_version
RASP 使用的服务器版本号
heartbeat_interval
心跳间隔时间,单位:秒
rasp_home
RASP 安装目录
last_heartbeat_time
上次心跳时间,如果还没有心跳,就是注册时间
online
rasp 是否在线,此处该值应为 true
host_type
主机类型,如 docker
plugin_version
插件版本,注册时还没有下发插件,所以为空
plugin_name
插件名称,注册时还没有下发插件,所以为空
plugin_md5
插件内容校验和,注册时还没有下发插件,所以为空
environ
服务进程环境变量
register_time
注册的时间戳,单位:秒
心跳接口
** 描述 **:接受 RASP 向云控后台的定时心跳,如果请求参数中的 md5 和后台指定的插件 md5 不同则判定有新插件,如果配置时间小于云控后台的最后配置时间,判定有新配置,每次更新都是插件和配置的全量更新。
** 请求方法 **:POST
** 路径 **:v1/agent/heartbeat
** 请求体 **:
{
"rasp_id":"47af9da31ec3f233f35a25776f5e06086ebf239f",
"plugin_md5":"47af9da31ec3f2ebf239f",
"plugin_version":"2018-08-15 11:11:12",
"config_time":1536302712000,
"hostname":"rasp-host"
}
** 参数说明 **:
rasp_id
String
是
RASP 唯一标识
plugin_md5
String
是
当前 RASP 的插件 MD5
plugin_version
String
是
当前插件的版本
config_time
int
否
后台配置的最后修改时间,如果没有该字段或者为 0,当做没有下发过配置处理,则会下发配置
hostname
String
否
主机 hostname,用于运行时更新
** 返回结果 **:
{
"status":0,
"description":"ok",
"data":{
"plugin":{
"version":"2018-08-15 11:11:12"
"md5":"569e8ea7a16123492b5878920fd36985",
"plugin":"/*javascript*/"
},
"config_time":1536303412000,
"config":{
"block.content_html": "</script><script>location.href=\"https://rasp.baidu.com/blocked2/?request_id=%request_id%\"</script>",
"block.content_json": "{\"xxxx\":\"xxxxxx\"}",
"block.content_xml": "<?xml version=\"1.0\"?><doc><error>true</error><reason>Request blocked by OpenRASP</reason><request_id>%request_id%</request_id></doc>",
"block.redirect_url": "https://rasp.baidu.com/blocked/?request_id=%request_id%",
"block.status_code": 302,
"body.maxbytes": 4096,
"clientip.header": "ClientIP",
"debug.level": 0,
"decompile.enable": true,
"inject.custom_headers": {},
"log.maxbackup": 30,
"log.maxburst": 100,
"ognl.expression.minlength": 30,
"plugin.filter": true,
"plugin.maxstack": 100,
"plugin.timeout.millis": 100,
"syslog.enable": false,
"syslog.facility": 1,
"syslog.tag": "OpenRASP",
"syslog.url": "",
"hook.white":{
"www.test.com/test1":[sql,ssrf],
"www.test.com/test2":[sql,ssrf],
"*":[all]
}
}
}
}
** 参数说明 **:
统计上报接口
** 描述 **:上传 rasp 统计信息
** 请求方法 **:POST
** 路径 **:v1/agent/report
** 请求体 **:
{
"rasp_id":"569e8ea7a16123492b5878920fd36985",
"time":15665422321,
"request_sum":10000
}
** 参数说明 **:
rasp_id
String
是
RASP 唯一标识
time
int
是
统计时间,毫秒时间戳
request_sum
int
否
请求数量,默认 0
** 返回结果 **:
{
"status":0,
"description":"ok",
"data":{}
}
崩溃上报接口
** 描述 **:上传 rasp 奔溃信息
** 请求方法 **:POST
** 路径 **:v1/agent/crash/report
** 请求体 **:
格式: multipart/form-data
内容:
crash_log: hs_err_pid25945.log
hostname: Mac-xxxx-host
language: java
rasp_id: d5ged5g54dr1gdr5d5erg5rdg
** 参数说明 **:
crash_log
文件
是
崩溃日志
rasp_id
String
是
RASP 唯一标识,RASP 可以不存在
language
String
否
RASP 语言
hostname
String
否
主机名
** 返回结果 **:
{
"status":0,
"description":"ok",
"data":{}
}
上传攻击报警日志
** 描述 **:上传 RASP 攻击日志
** 请求方法 **:POST
** 路径 **:v1/agent/log/attack
** 请求体 **:
[
{
"rasp_id":"545e8336cf5b612f358ae51ff0466476",
"app_id":"5f1b8ba39b85e2f857f6b219156470e648fd2b4f",
"server_nic": [{
"name": "cscotun0",
"ip": "172.23.232.63"
}, {
"name": "vmnet8",
"ip": "172.16.75.1"
}, {
"name": "docker0",
"ip": "172.17.0.1"
}, {
"name": "eno1",
"ip": "172.20.94.78"
}],
"event_type": "attack",
"attack_source": "127.0.0.1",
"attack_type": "command",
"plugin_name": "official",
"url": "http://127.0.0.1:8396/vulns/004-command-1.jsp?cmd\u003dcp+/etc/passwd+/tmp/",
"header": {
"cookie": "JSESSIONID\u003dF11746396310A9E88FF1C44F98B958EE; ADMINCONSOLESESSION\u003dv165dQlfGTrfpxDBdDkhTHmqVR2gYbMP57pJyRvyKsD4RcTC12N0!2052002414; JSESSIONID\u003dTkSZdRVGCnpRjYwp15dtrlnZRcFrq2q2qQ2H1fchYLstJX1BkvpF!-354254474",
"connection": "keep-alive",
"accept-language": "zh,en-US;q\u003d0.9,en;q\u003d0.8,zh-CN;q\u003d0.7",
"host": "127.0.0.1:8396",
"sec-fetch-mode": "navigate",
"accept": "text/html,application/xhtml+xml,application/xml;q\u003d0.9,image/webp,image/apng,*/*;q\u003d0.8,application/signed-exchange;v\u003db3",
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/76.0.3809.87 Chrome/76.0.3809.87 Safari/537.36",
"accept-encoding": "gzip, deflate, br",
"referer": "http://127.0.0.1:8396/vulns/004-command-1.jsp",
"sec-fetch-site": "same-origin",
"upgrade-insecure-requests": "1"
},
"server_type": "tomcat",
"client_ip": "",
"server_hostname": "tyy-work",
"source_code": "",
"request_method": "get",
"plugin_confidence": 90,
"request_id": "d65f0a1cf2e24951b3eb34ed25378e75",
"intercept_state": "block",
"server_version": "8.5.30.0",
"server_ip": "127.0.0.1",
"attack_params": {
"command": "cp /etc/passwd /tmp/",
"stack": ["java.lang.UNIXProcess.\u003cinit\u003e", "java.lang.ProcessImpl.start", "java.lang.ProcessBuilder.start", "java.lang.Runtime.exec", "java.lang.Runtime.exec", "java.lang.Runtime.exec", "org.apache.jsp._004_002dcommand_002d1_jsp._jspService", "org.apache.jasper.runtime.HttpJspBase.service", "javax.servlet.http.HttpServlet.service", "org.apache.jasper.servlet.JspServletWrapper.service", "org.apache.jasper.servlet.JspServlet.serviceJspFile", "org.apache.jasper.servlet.JspServlet.service", "javax.servlet.http.HttpServlet.service", "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter", "org.apache.catalina.core.ApplicationFilterChain.doFilter", "org.apache.tomcat.websocket.server.WsFilter.doFilter", "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter", "org.apache.catalina.core.ApplicationFilterChain.doFilter", "org.apache.catalina.core.StandardWrapperValve.invoke", "org.apache.catalina.core.StandardContextValve.invoke", "org.apache.catalina.authenticator.AuthenticatorBase.invoke", "org.apache.catalina.core.StandardHostValve.invoke", "org.apache.catalina.valves.ErrorReportValve.invoke", "org.apache.catalina.valves.AbstractAccessLogValve.invoke", "org.apache.catalina.core.StandardEngineValve.invoke", "org.apache.catalina.connector.CoyoteAdapter.service", "org.apache.coyote.http11.Http11Processor.service", "org.apache.coyote.AbstractProcessorLight.process", "org.apache.coyote.AbstractProtocol$ConnectionHandler.process", "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun", "org.apache.tomcat.util.net.SocketProcessorBase.run", "java.util.concurrent.ThreadPoolExecutor.runWorker", "java.util.concurrent.ThreadPoolExecutor$Worker.run", "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run", "java.lang.Thread.run"]
},
"plugin_message": "WebShell detected - Executing command: cp /etc/passwd /tmp/",
"path": "/vulns/004-command-1.jsp",
"target": "127.0.0.1",
"event_time": "2019-08-13T20:24:51+0800",
"plugin_algorithm": "command_userinput",
"body":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
]
** 参数说明 **:攻击日志数组,包含多条攻击日志,日志字段说明:https://rasp.baidu.com/doc/setup/log/main.html
** 返回结果 **:
{
"status":0,
"description":"ok",
"data":{
"count":1
}
}
count
成功处理的日志数量
上传类库依赖信息{#upload-dependencies}
** 描述 **:根据主机上传类库信息
** 请求方法 **:POST
** 路径 **:v1/agent/dependency
** 请求体 **:
{
"dependency": [{
"product": "rasp-engine",
"version": "1.3.0",
"vendor": "com.baidu.openrasp",
"path": "/home/work/rasp/rasp-engine.jar",
"source": "pom"
}, {
"product": "rasp-engine",
"version": "7.0.78",
"vendor": "Apache Software Foundation",
"path": "/home/work/rasp/rasp-engine.jar",
"source": "manifest_implementation"
}, {
"product": "Bootstrap",
"version": "7.0.78",
"vendor": "Apache Software Foundation",
"path": "/home/work/rasp/bin/bootstrap.jar",
"source": "manifest_implementation"
}],
"rasp_id": "3089c8d2672efd1ef5c3e322d9e8fcb1"
}
** 参数说明 **:
rasp_id
String
是
所属的 RASP
product
String
是
产品名称
version
String
是
版本号
vendor
String
是
厂商
path
String
是
类库依赖路径
source
String
否
来源
** 返回结果 **:
{
"data": {
},
"description": "ok",
"status": 0
}
上传基线报警日志
** 描述 **:基线报警内容,基线报警会根据 "stack_trace,rasp_id, policy_id, policy_param “ 几个字段进行去重操作,这几个字段相同的报警只会出现一次。
** 请求方法 **:POST
** 路径 **:v1/agent/log/policy
** 请求体 **:
[
{
"app_id": "fcbc4d8ac6bcaac27b1cc4703e5339a4aa6e8a1c",
"rasp_id": "426199dc7a15cce89b0c937a65a24a23",
"event_time": "2019-01-04T09:56:48+0000",
"event_type": "security_policy",
"message": "Java security baseline - should not start application server with root account",
"policy_id": "3002",
"policy_params": {
"pid": 431,
"stack":["java.lang.UNIXProcess.\u003cinit\u003e", "java.lang.ProcessImpl.start", "java.lang.ProcessBuilder.start", "java.lang.Runtime.exec", "java.lang.Runtime.exec", "java.lang.Runtime.exec", "org.apache.jsp._004_002dcommand_002d1_jsp._jspService", "org.apache.jasper.runtime.HttpJspBase.service", "javax.servlet.http.HttpServlet.service", "org.apache.jasper.servlet.JspServletWrapper.service", "org.apache.jasper.servlet.JspServlet.serviceJspFile", "org.apache.jasper.servlet.JspServlet.service", "javax.servlet.http.HttpServlet.service", "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter", "org.apache.catalina.core.ApplicationFilterChain.doFilter", "org.apache.tomcat.websocket.server.WsFilter.doFilter", "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter", "org.apache.catalina.core.ApplicationFilterChain.doFilter", "org.apache.catalina.core.StandardWrapperValve.invoke", "org.apache.catalina.core.StandardContextValve.invoke", "org.apache.catalina.authenticator.AuthenticatorBase.invoke", "org.apache.catalina.core.StandardHostValve.invoke", "org.apache.catalina.valves.ErrorReportValve.invoke", "org.apache.catalina.valves.AbstractAccessLogValve.invoke", "org.apache.catalina.core.StandardEngineValve.invoke", "org.apache.catalina.connector.CoyoteAdapter.service", "org.apache.coyote.http11.Http11Processor.service", "org.apache.coyote.AbstractProcessorLight.process", "org.apache.coyote.AbstractProtocol$ConnectionHandler.process", "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun", "org.apache.tomcat.util.net.SocketProcessorBase.run", "java.util.concurrent.ThreadPoolExecutor.runWorker", "java.util.concurrent.ThreadPoolExecutor$Worker.run", "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run", "java.lang.Thread.run"]
},
"server_hostname": "820c2691f452",
"server_nic": [{
"ip": "172.17.0.2",
"name": "eth0"
}],
"server_type": "tomcat",
"server_version": "7.0.78.0"
}
]
** 参数说明 **:基线日志数组,包含多条基线日志,极限报警字段说明:https://rasp.baidu.com/doc/setup/log/main.html
** 返回结果 **:
{
"status":0,
"description":"ok",
"data":{
"count":1
}
}
count
成功处理的日志数量
上传异常日志
** 描述 **:上传异常日志
** 请求方法 **:POST
** 路径 **:v1/agent/log/error
** 请求体 **:
[
{
"message": "HTTP request to http://scloud.baidu.com:8086/v1/agent/rasp failed:",
"server_nic": [{
"name": "en0",
"ip": "172.24.182.127"
}],
"stack_trace": "sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\nsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)\nsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\njava.lang.reflect.Constructor.newInstance(Constructor.java:526)\nsun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1676)\nsun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1674)\njava.security.AccessController.doPrivileged(Native Method)\nsun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1672)\nsun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1245)\ncom.baidu.openrasp.cloud.CloudHttp.request(CloudHttp.java:64)\ncom.baidu.openrasp.cloud.Register$RegisterThread.run(Register.java:54)\njava.lang.Thread.run(Thread.java:745)\n",
"level": "WARN",
"event_time": "2019-01-11T13:36:46+0800",
"app_id": "9b3554a97673f1f8f5c929310298037a660d3b7a",
"pid": 58353,
"server_hostname": "localhost",
"rasp_id": "3089c8d2672efd1ef5c3e322d9e8fcb1"
}
]
** 参数说明 **:错误日志数组,包含多条错误日志,字段说明同上文基线报警字段说明。
** 返回结果 **:
{
"status":0,
"description":"ok",
"data":{
"count":1
}
}
count
成功处理的日志数量
RASP Agent认证接口
** 描述 **:用于认证 app id 和 app secrete
** 请求方法 **:POST
** 路径 **:v1/agent/auth
** 请求体 **:空
** 返回结果 **:
{
"status":0,
"description":"ok"
}
扫描器接口
接口描述{#iast-api-description}
** 请求格式 **:
请求体采用 json 格式,分页页码从 1 开始计数,分页请求格式如下所示:
{
"order":"startTask",
"data":{
.....
}
}
** 参数说明 **:
order
任务类型。
host
扫描目标主机
** 响应格式 **:
响应采用 json 格式,示例如下:
{
"data":{
"data":{
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
},
"description":"ok",
"register":2,
"status":0
},
"description":"ok",
"status":0
}
** 参数说明 **:
data
扫描器返回给云控后台的内容
app_id
APP 唯一标识
register
扫描器状态:0表示扫描器未连接,1表示正在连接中,2表示扫描器连接成功,3表示接收响应异常,4表示扫描器连接超时
data.status
错误码
认证方式{#iast-auth}
增加请求头: Content-Type: application/json
认证接口{#iast-api-auth}
** 描述 **:获取当前云控后台版本号
** 请求方法 **:POST
** 路径 **:v1/iast/version
** 请求体 **:空
** 返回结果 **:
{
"data":{
"version":"1.3"
},
"description":"ok",
"status":0
}
扫描任务类{#scanner-task}
新建扫描{#new-task}
** 描述 **:为扫描器新建扫描任务
** 请求方法 **:POST
** 路径 **:v1/iast
** 请求体 **:
{
"order":"startTask",
"data":{
"host":"1.2.3.4",
"port": 80,
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
}
}
order
String
是
任务类型。startTask表示新建扫描
host
String
是
扫描目标主机
port
String
是
扫描目标端口
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data":{
"data":{
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
},
"description":"ok",
"register":2,
"status":0
},
"description":"ok",
"status":0
}
data
扫描器返回给云控后台的内容
app_id
APP 唯一标识
register
扫描器状态。2表示扫描器连接成功
data.status
错误码:2 并发扫描任务达到限制 , 3 目标正在被其他任务扫描
修改配置{#setconfig-task}
** 描述 **:修改目标主机的扫描配置
** 请求方法 **:POST
** 路径 **:v1/iast
** 请求体 **:
{
"order":"setConfig",
"data":{
"host":"1.2.3.4",
"port":80,
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec",
"config":{
"scan_plugin_status":{
"command_basic":{
"description":"基础命令注入漏洞检测插件",
"enable":true,
"show_name":"命令注入检测插件"
},
...
},
"scan_rate":{
"max_concurrent_request":20,
"max_request_interval":1000,
"min_request_interval":0
},
"white_url_reg":"^/path/eg",
"scan_proxy":"http://127.0.0.1:8080"
}
}
}
order
String
是
任务类型。setConfig表示修改配置
host
String
是
扫描目标主机
port
String
是
扫描目标端口
app_id
String
是
APP 唯一标识
scan_plugin_status
Object
是
配置参数
scan_rate
Object
是
扫描速率设置
white_url_reg
String
否
url白名单正则
scan_proxy
String
否
扫描请求使用的http代理
** 返回结果 **:
{
"data":{
"data":{
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
},
"description":"ok",
"register":2,
"status":0
},
"description":"ok",
"status":0
}
data.status
错误码:2 白名单正则不合法, 3 代理协议不为http或https
获取配置{#getconfig-task}
** 描述 **:获取目标主机的扫描配置
** 请求方法 **:POST
** 路径 **:v1/iast
** 请求体 **:
{
"order":"getConfig",
"data":{
"host":"1.2.3.4",
"port": 80,
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
}
}
order
String
是
任务类型。getConfig表示获取配置
host
String
是
扫描目标主机
port
String
是
扫描目标端口
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data":{
"data":{
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec",
"scan_plugin_status":{
"command_basic":{
"enable":true,
"show_name":"命令注入检测插件",
"description":"xxxx"
}
},
"scan_rate":{
"max_concurrent_request":10,
"max_request_interval":1000,
"min_request_interval":0
},
"white_url_reg":"^/logout"
},
"description":"ok",
"register":2,
"status":0
},
"description":"ok",
"status":0
}
scan_plugin_status
插件开关
max_concurrent_request
最大并发请求数
max_request_interval
最大请求间隔
min_request_interval
最小请求间隔
app_id
APP 唯一标识
终止扫描{#stop-task}
** 描述 **:立即终止指定的扫描任务
** 请求方法 **:POST
** 路径 **:v1/iast
** 请求体 **:
{
"order":"stopTask",
"data":{
"scanner_id":0,
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
}
}
order
String
是
任务类型。getConfig表示获取配置
scanner_id
Int
是
扫描任务id
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data":{
"data":{
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
},
"description":"ok",
"register":2,
"status":0
},
"description":"ok",
"status":0
}
data.status
错误码:2 指定的扫描任务不存在,3 终止失败
扫描数据类{#scanner-data}
获取所有目标{#getall-task}
** 描述 **:获取所有安装rasp agent的主机(agent至少发送过一次http请求结果)
** 请求方法 **:POST
** 路径 **:v1/iast
** 请求体 **:
{
"order":"getAllTasks",
"data":{
"page":1,
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
}
}
app_id
String
是
APP 唯一标识
order
String
是
指令参数。"getAllTasks"表示获取所有目标
** 返回结果 **:
{
"status":0,
"description":"ok",
"data":{
"total":0,
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec",
"result":[
{
"host":"127.0.0.1",
"port":8010,
"total":2,
"scanned":0,
"failed":0,
"last_time":1571303703
}
]
}
}
** 参数说明 **:
app_id
APP 唯一标识
host
扫描器返回的数据,接口说明详见
port
端口号
total
该目标下的总url数
scanned
该目标下的扫描的url数
failed
该目标下扫描失败的url数
last_time
最后收到任务的时间
清空扫描任务{#clean-task}
** 描述 **:清空目标主机的信息(重置为一个未配置的agent状态),或清空url列表
** 请求方法 **:POST
** 路径 **:v1/iast
** 请求体 **:
{
"order":"cleanTask",
"data":{
"host":"1.2.3.4",
"port":80,
"url_only":true,
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
}
}
order
String
是
任务类型。cleanTask表示清除任务
host
String
是
扫描目标主机
port
String
是
扫描目标端口
url_only
Bool
是
是否仅清空url
app_id
String
是
APP 唯一标识
** 返回结果 **:
{
"data":{
"data":{
"app_id":"593342c72eb78fc8e7393d0a87b8f3fc54dfbec"
},
"description":"ok",
"register":2,
"status":0
},
"description":"ok",
"status":0
}
data.status
错误码:2 目标正在被扫描
Last updated