OpenRASP Documents (Old)
  • 简介
  • 安装部署
    • 兼容性说明
    • 安装管理后台
    • 快速接入
      • PHP 服务器
      • Tomcat 服务器
      • JBoss 服务器
      • Wildfly 服务器
      • Resin 服务器
      • Jetty 服务器
      • Spring Boot 框架
      • WebLogic 服务器
      • WebSphere 服务器
      • 宝兰德BES服务器
      • 东方通TongWeb服务器
      • 中创InforSuiteAS服务器
      • 普元PAS服务器
    • 安装测试用例
    • 安装灰盒扫描工具
      • IAST 高级配置选项
    • SIEM 系统集成
      • Splunk
      • Logstash
    • 大规模部署
    • 卸载软件
  • 服务配置
    • 日志说明
    • 管理后台
    • 单机版本
    • 其他配置
  • 功能说明
    • 攻击检测能力说明
    • CVE 漏洞覆盖说明
    • 安全基线检查
    • 应用加固支持
    • 应用异常监控
    • 类库信息查询
    • HTML 响应修改
  • 插件开发
    • 开发插件
    • 接口说明
      • RASP 类接口
      • Context 类接口
    • 参数说明
    • 单元测试
    • 在线调试
    • 官方插件定制
  • 二次开发
    • 架构说明
      • Java 版本
      • PHP 版本
      • 管理后台
      • IAST 扫描器
      • Hook 函数列表
    • 从源代码编译
      • Java 版本
      • PHP 版本
      • 管理后台
    • 云控后台接口
    • 代码调试
    • 添加新的Hook点
    • 添加新的插件API
    • 提交你的代码
  • 性能测试
  • 版本变更
  • 关于我们
Powered by GitBook
On this page
  • 接口描述
  • Ping 接口
  • Version 接口
  • 前端接口
  • 认证方式
  • 登录登出接口
  • 插件管理接口
  • App管理接口
  • RASP管理接口
  • 类库信息管理接口{#manage-dependency}
  • 静态Token管理接口
  • 操作日志接口
  • 服务器管理接口
  • 请求统计接口
  • 报警接口
  • 异常接口
  • RASP接口
  • 认证方式
  • RASP 注册接口
  • 心跳接口
  • 统计上报接口
  • 崩溃上报接口
  • 上传攻击报警日志
  • 上传类库依赖信息{#upload-dependencies}
  • 上传基线报警日志
  • 上传异常日志
  • RASP Agent认证接口
  • 扫描器接口
  • 接口描述{#iast-api-description}
  • 认证方式{#iast-auth}
  • 认证接口{#iast-api-auth}
  • 扫描任务类{#scanner-task}
  • 扫描数据类{#scanner-data}
Export as PDF
  1. 二次开发

云控后台接口

接口描述

** 请求格式 **:

请求体采用 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
}

前端接口

认证方式

认证方式分为两种:

  1. 登陆之后获取 cookie 认证,cookie字段为 RASP_AUTH_ID,cookie有效期默认 7 天。

  2. 通过在请求头中添加静态 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]
            }
		}
	}
}

** 参数说明 **:

参数
说明

plugin

插件内容

config_time

本次下发配置的时间

config

统计上报接口

** 描述 **:上传 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"
    }
]

** 返回结果 **:

{
	"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"
	}
]

** 返回结果 **:

{
	"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 目标正在被扫描

Previous管理后台Next代码调试

Last updated 11 days ago

下发的配置,配置项的详细说明:

** 参数说明 **:攻击日志数组,包含多条攻击日志,日志字段说明:

** 参数说明 **:基线日志数组,包含多条基线日志,极限报警字段说明:

https://rasp.baidu.com/doc/setup/log/main.html
https://rasp.baidu.com/doc/setup/log/main.html
https://rasp.baidu.com/doc/setup/others.html