开发一个检测插件
开发环境准备
下载并安装 ,Ubuntu 系统可使用 命令进行安装
安装插件开发工具 openraspjs:
编写第一个插件
检测插件针对应用的行为进行检测,当应用执行数据库查询、文件读写等操作,OpenRASP 引擎就会调用检测插件,并将相关参数一并传递过来。一个最小的SQL检测插件如下所示:
params
为检查点提供的参数,如SQL语句、要读取的文件等等
最后,我们在回调函数里,返回检测结果,即 "放行"
目前我们支持14个检测点,具体请看 文档。
调用插件接口
我们在 RASP 类里提供了一些接口,可以直接在插件里调用。比如,你可以调用 RASP.sql_tokenize 将SQL语句转化为 token:
测试检测插件
现在,我们已经完成了检测插件,下一步是进行测试。测试有两种方法:
- 参考 单元测试,编写JSON测试用例并使用 openraspjs 进行测试
- 参考 ,将插件放到安装了 OpenRASP 的应用服务器进行测试 若你是初次接触插件开发,我们推荐使用第二种方式,即使用 OpenRASP 单机版调试。具体调试方法请参考上述文档,这里不再赘述。
拦截危险操作
现在,我们已经能够编写检测插件,并在客户端运行。接下来就是拦截攻击了,在回调函数里,将返回的 action 字段改为 block
即可拦截请求。比如,当SQL语句包含union注入特征,我们想拦截整个请求的话,可以这样写:
在官方插件里,实际的检测算法要复杂的很多,有兴趣可以参考 的实现。如果不想拦截攻击,只是想记录攻击日志,可将 action 字段设置为 。
注意: 当某个插件拦截了攻击,其他插件将不在被调用。
注意事项
- 插件环境可能不支持某些最新的 JavaScript 语法,请使用 openrasjs 进行语法检查
- 插件不能使用与平台相关的全局对象,只能使用