• 插件测试
    • 参数说明
    • 默认测试
    • 插件耗时测试
    • 自定义测试脚本
      • 编写自定义测试脚本

    插件测试

    参数说明

    我们的插件开发工具 openraspjs 提供了插件测试命令,可以对插件进行代码检查、性能测试、检测能力测试。命令行参数如下,

    1. $ rasp check -h
    2. Usage: rasp check <file>
    3. Options:
    4. -t, --test-dir <dir> specify a custom test directory
    5. -h, --help output usage information

    默认测试

    openraspjs 提供了一些默认的必须执行的测试脚本,包括代码检查和基础能力检测,更多细节请参看代码

    1. $ rasp check plugin.js
    2. 插件代码检查 代码规范: 188ms
    3. 插件代码检查 模拟环境: 0ms
    4. 插件能力测试 sql 安全 DESC wp_users: 0ms
    5. 插件能力测试 sql 安全 select name, email from users where id = 1002: 0ms
    6. 插件能力测试 sql 不安全 select name, email from users where id = 1002 and 1=2 union select table_name, table_schema from information_schema.tables: 0ms
    7. 5 passing (203ms)

    当测试结果中出现 failing 和详细错误信息时,表示插件未通过检测

    插件耗时测试

    每一个测试用例所消耗的时间出现在测试结果行的最末端

    若时间被标注为黄色,表示该测试用例消耗时间过长,若时间被标注为红色,表示该测试用例消耗时间超过最大限制。默认超时时间为 20ms

    自定义测试脚本

    通过 -t 选项指定自定义测试脚本目录,openraspjs 仅载入该目录下以 .test.js 结尾的测试脚本

    编写自定义测试脚本

    我们使用了测试框架 Mocha 来进行测试

    我们在测试环境中增加了全局对象 RASPCheckPoint*Context 等对象,可直接使用

    e.g 这是一个SQL注入的单元测试脚本,我们期望插件返回拦截操作

    1. const expect = require('chai').expect
    2. describe('自定义测试', function () {
    3. describe('SQL注入测试', function () {
    4. it('union 注入', function () {
    5. var results = RASP.check('sql', {
    6. server: 'mysql',
    7. query: 'select name, email from users where id = 1002 and 1=2 union select table_name, table_schema from information_schema.tables'
    8. }, new Context())
    9. expect(results).to.be.a('array')
    10. results.forEach(result => {
    11. expect(result).to.have.property('action').to.equal('block')
    12. expect(result).to.have.property('message').to.be.a('string')
    13. })
    14. })
    15. })
    16. })

    原文: https://rasp.baidu.com/doc/dev/test/main.html