插件测试

参数说明

我们的插件开发工具 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