- RASP 类接口
- 创建实例
- 获取agent版本号 (v1.2.0 加入)
- 获取JS引擎名称
- 发送HTTP请求 (v1.2.0 加入)
- 注册检测程序到对应检测点
- 将SQL语句解析为 Token(BETA)
- 将 Bash/CMD 语句解析为 Token(BETA)
- 打印调试日志
- 获取插件名
- 手动调用检测方法
RASP 类接口
所有插件需要实例化一个 RASP 对象,并在此对象上注册各检测点对应的检测程序
创建实例
创建 RASP 实例需传入插件名,e.g demo
var plugin = new RASP('demo')
获取agent版本号 (v1.2.0 加入)
var name = plugin.get_version()// 返回 1.2.0`
获取JS引擎名称
var name = plugin.get_jsengine()// 返回 rhino / v8
发送HTTP请求 (v1.2.0 加入)
支持发送 GET/POST 请求,其中 data 字段可以是字符串、对象或者 Buffer
var body = {"name": "openrasp"}var req = {"method": "post","url": "http://127.0.0.1/test","data": data,"maxRedirects": 0,"timeout": 30,"headers": {"content-type": "application/json"},}RASP.request(req)
注册检测程序到对应检测点
检测函数接受两个参数
params对应检测点的参数信息context请求上下文信息
plugin.register('sql', function(params, context) {// 在这里实现检测逻辑// 并返回结果return {action: 'ignore',message: '无风险'}})
具体有哪些检测点可以注册,以及 params 的样例,请参考检 参数说明
注意: 对于同一个检测点,如果你注册了多个检测函数,这些函数会按照注册顺序,依次调用
将SQL语句解析为 Token(BETA)
函数接受两个参数
query表示要解析的查询语句server表示SQL服务器类型 目前本功能还在试验阶段,且暂时不区分SQL服务器类型。
RASP.sql_tokenize('SELECT * FROM users WHERE id = -1 union/*!50000select*/1,2,3', 'mysql')// [// { text: 'SELECT', start: 0, stop: 5 },// { text: '*', start: 7, stop: 7 },// ...// ]
将 Bash/CMD 语句解析为 Token(BETA)
函数接受一个参数
command表示要解析的命令 目前本功能还在试验阶段,且暂时不区分操作系统
RASP.cmd_tokenize('/bin/bash -c ls')// [// { text: '/bin/bash', stop: 8, start: 0 },// { text: '-c', stop: 11, start: 10 },// { text: 'ls', stop: 14, start: 13 }// ]
打印调试日志
使用方法与 console.log 一致,只是会同时输出插件的名字,方便你区分不同插件的日志
plugin.log('hello', 'openrasp')// 将会在日志里输出 [demo] hellp openrasp
获取插件名
var name = plugin.name// => 'demo'
手动调用检测方法
在编写单元测试时,可手动调用此方法
这个方法会按照注册顺序,依次调用所有的检测函数,并返回一个检测结果数组
e.g 模拟一个SQL注入请求,请调用插件获取检测结果
var params = {'query': 'select * from users','server': 'mysql'}var checkContext = new Context()RASP.check('sql', params, context)// => [{// 'action': 'block',// 'message': 'attack',// 'name': 'demo'// }]
