• RASP 类接口
    • 创建实例
    • 获取agent版本号 (v1.2.0 加入)
    • 获取JS引擎名称
    • 发送HTTP请求 (v1.2.0 加入)
    • 注册检测程序到对应检测点
    • 将SQL语句解析为 Token(BETA)
    • 将 Bash/CMD 语句解析为 Token(BETA)
    • 打印调试日志
    • 获取插件名
    • 手动调用检测方法

    RASP 类接口

    所有插件需要实例化一个 RASP 对象,并在此对象上注册各检测点对应的检测程序

    创建实例

    创建 RASP 实例需传入插件名,e.g demo

    1. var plugin = new RASP('demo')

    获取agent版本号 (v1.2.0 加入)

    1. var name = plugin.get_version()
    2. // 返回 1.2.0
    3. `

    获取JS引擎名称

    1. var name = plugin.get_jsengine()
    2. // 返回 rhino / v8

    发送HTTP请求 (v1.2.0 加入)

    支持发送 GET/POST 请求,其中 data 字段可以是字符串、对象或者 Buffer

    1. var body = {
    2. "name": "openrasp"
    3. }
    4. var req = {
    5. "method": "post",
    6. "url": "http://127.0.0.1/test",
    7. "data": data,
    8. "maxRedirects": 0,
    9. "timeout": 30,
    10. "headers": {
    11. "content-type": "application/json"
    12. },
    13. }
    14. RASP.request(req)

    注册检测程序到对应检测点

    检测函数接受两个参数

    • params 对应检测点的参数信息
    • context 请求上下文信息
    1. plugin.register('sql', function(params, context) {
    2. // 在这里实现检测逻辑
    3. // 并返回结果
    4. return {
    5. action: 'ignore',
    6. message: '无风险'
    7. }
    8. })

    具体有哪些检测点可以注册,以及 params 的样例,请参考检 参数说明

    注意: 对于同一个检测点,如果你注册了多个检测函数,这些函数会按照注册顺序,依次调用

    将SQL语句解析为 Token(BETA)

    函数接受两个参数

    • query 表示要解析的查询语句
    • server 表示SQL服务器类型 目前本功能还在试验阶段,且暂时不区分SQL服务器类型。
    1. RASP.sql_tokenize('SELECT * FROM users WHERE id = -1 union/*!50000select*/1,2,3', 'mysql')
    2. // [
    3. // { text: 'SELECT', start: 0, stop: 5 },
    4. // { text: '*', start: 7, stop: 7 },
    5. // ...
    6. // ]

    将 Bash/CMD 语句解析为 Token(BETA)

    函数接受一个参数

    • command 表示要解析的命令 目前本功能还在试验阶段,且暂时不区分操作系统
    1. RASP.cmd_tokenize('/bin/bash -c ls')
    2. // [
    3. // { text: '/bin/bash', stop: 8, start: 0 },
    4. // { text: '-c', stop: 11, start: 10 },
    5. // { text: 'ls', stop: 14, start: 13 }
    6. // ]

    打印调试日志

    使用方法与 console.log 一致,只是会同时输出插件的名字,方便你区分不同插件的日志

    1. plugin.log('hello', 'openrasp')
    2. // 将会在日志里输出 [demo] hellp openrasp

    获取插件名

    1. var name = plugin.name
    2. // => 'demo'

    手动调用检测方法

    在编写单元测试时,可手动调用此方法

    这个方法会按照注册顺序,依次调用所有的检测函数,并返回一个检测结果数组

    e.g 模拟一个SQL注入请求,请调用插件获取检测结果

    1. var params = {
    2. 'query': 'select * from users',
    3. 'server': 'mysql'
    4. }
    5. var checkContext = new Context()
    6. RASP.check('sql', params, context)
    7. // => [{
    8. // 'action': 'block',
    9. // 'message': 'attack',
    10. // 'name': 'demo'
    11. // }]