- 云控后台接口文档
- 接口描述
- Ping 接口
- 前端接口
- 认证方式
- 登录登出接口
- 登录接口
- 登出接口
- 获取是否登录
- 默认密码判断接口
- 更改密码接口
- 插件管理接口
- 上传插件
- 下载插件
- 获取插件基本信息
- 下发算法配置
- 恢复插件默认算法配置
- 删除插件
- App管理接口
- 新增 APP
- 删除 APP
- 获取 App
- 下发通用配置
- 下发白名单配置
- 下发报警配置
- APP 配置接口
- 获取 APP 下的所有插件
- 获取 APP 下发的插件
- 设置 APP 下发的插件
- 测试邮件报警
- 测试钉钉报警
- 测试 HTTP 报警
- 获取插件更新信息
- RASP管理接口
- 搜索 RASP
- 导出 RASP
- 删除 RASP
- 批量删除 RASP
- RASP 备注接口
- 静态Token管理接口
- 生成/更新 token
- 获取 token
- 删除token
- 操作日志接口
- 搜索操作日志
- 服务器管理接口
- 获取服务器 url
- 更改服务器地址
- 请求统计接口
- 请求统计信息聚合
- 报警接口
- 按照时间聚合攻击日志
- 按照类型聚合攻击日志
- 按照 UA 聚合攻击日志
- 漏洞聚合搜索
- 攻击报警搜索
- 基线报警搜索
- 异常接口
- 搜索异常信息
- RASP接口
- 认证方式
- RASP 注册接口
- 心跳接口
- 统计上报接口
- 上传攻击报警日志
- 上传基线报警日志
- 上传异常日志
云控后台接口文档
接口描述
请求格式 :
请求体采用 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}
前端接口
认证方式
认证方式分为两种:
- 登陆之后获取 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
{"page":1,"perpage":10}
参数说明:
| 参数 | 参数类型 | 必须 | 说明 |
|---|---|---|---|
| app_id | String | 否 | APP 唯一标识,有该参数则返回相应 id 的 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": 4096,"clientip.header": "ClientIP","ognl.expression.minlength": 30,"plugin.filter": true,"plugin.maxstack": 100,"plugin.timeout.millis": 100,"syslog.tag": "OpenRASP","syslog.url": "","syslog.facility": 1,"syslog.enable": false,}}
参数说明 :
| 参数 | 参数类型 | 必须 | 说明 |
|---|---|---|---|
| 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}}]}
参数说明 :
| 参数 | 参数类型 | 必须 | 说明 |
|---|---|---|---|
| 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"]}}
参数说明 :
| 参数 | 参数类型 | 必须 | 说明 |
|---|---|---|---|
| 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 报警接收地址列表 |
返回结果 :返回更新之后的完整 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}
测试邮件报警
描述 :测试邮件报警
请求方法 :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}
获取插件更新信息
描述 :如果当前插件是官方插件的话,判断当前下发插件是否为最新官方插件,如果不是返回当前下发插件和最新插件的版本信息
请求方法 :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,并把搜索结果导出到 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}
静态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}
请求统计接口
请求统计信息聚合
描述 :按照时间聚合 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":1535600036000,"end_time":1546140836000,"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":1535600036000,"end_time":1546140836000,"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":1535600036000,"end_time":1546140836000,"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":"1523264521321000","end_time":"1523264521421000"}"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":"1523264521321000","end_time":"1523264521421000"}"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 | 搜索攻击结果 |
基线报警搜索
描述 :搜索基线日志,结果结果按照时间降序排序
请求方法 :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":"1523264521321000","end_time":"1523264521421000"},"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":"1523264521321000","end_time":"1523264521421000"},"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]}}}}
参数说明 :
| 参数 | 说明 |
|---|---|
| plugin | 插件内容 |
| config_time | 本次下发配置的时间 |
| config | 下发的配置,配置项的详细说明:https://rasp.baidu.com/doc/setup/others.html |
统计上报接口
描述 :上传 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/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 | 成功处理的日志数量 |
上传基线报警日志
描述 :基线报警内容,基线报警会根据 "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 | 成功处理的日志数量 |
