# 插件
插件操作是openstar使用的高级玩法,当使用现有的规则匹配无法实现自己想要的功能,就可以自己编写`lua`代码实现自己想要的功能。
# 编写插件
```
local ngx_say = ngx.say
local stool = require("stool")
-- 可以使用 cjson_safe 模块进行 table 转 json 字符串
local _M = { _VERSION = "0.01" }
local function test(_base_msg , _tb_args)
local re = ""
for i,v in ipairs(_tb_args) do
re = re .. v .. "</br>"
end
ngx_say(re)
ngx_say("------------------</br>")
ngx_say(stool.tableTojsonStr(_base_msg))
return "break"
end
_M.test = test
return _M
```
看一下实际引用(高级规则)和对应的注释
![](https://img.kancloud.cn/62/de/62de944e1f0d4e396f102cbfc2d7be31_755x540.png)
* 函数名称:test
截图中函数名称是`test`,那么对应插件代码中 _M.test这个导出函数,至于等于的 test 函数,完全可以重命名为其他名称。
* 传递参数
截图中蓝色框标识的参数就是传递给插件代码中`_tb_args`这个值,这个是一个 table 类型,你可以传递一个复杂的 table
**插件函数的编写,一定要接受 2 个参数,第一个参数是 WAF 传递给他的 table , _base_msg 是一个table ,本次请求的所有值都在里面!!! 如果你要过滤某些参数,就可以从这里取出来,进行自己的过滤。**
* 返回值插件支持 4 个
```
return "break" ---> 直接返回给客户端,也不会到源站 200
return "deny" ---> 执行拒绝操作(延续自定义拦截页面)
return "allow" ---> 后续规则都不会匹配,直接转发到源站
return ---> 继续后续规则
```
# 效果
访问 http://xxxxx//cap.test 得到的效果
![](https://img.kancloud.cn/88/c8/88c849fc64c35b82e38f125467a9b152_1919x393.png)
- kcon 兵器谱
- 演示 1
- 演示 2
- 演示 3
- 演示 4
- 演示 5
- 前言
- 安装
- 更新
- 登录后台
- 授权认证
- 集群配置
- 7层防护 -- 最佳实践
- 匹配位置说明
- 匹配方式说明
- 规则匹配详解
- 全局 - CDN规则
- 添加header头配置
- 限速limit配置
- 缓存proxy_cache配置
- 清除缓存
- 全局 - 获取真实IP配置
- 全局 - IP黑白名单
- 全局 - 域名方法配置(白名单)
- 全局 - 跳转规则配置
- 全局 - 高级规则配置
- 全局 - 普通规则配置
- 全局 - 频率规则配置
- 全局 - 内容替换规则
- 内容替换规则(插件使用)
- 全局 - 拦截信息配置
- 全局 - LOG规则配置
- 平台配置
- 基本配置
- 高级配置
- 配置文件管理
- 4 层代理
- 转发配置
- 插件管理
- 防护配置
- 网站管理
- 证书管理
- 域名管理
- 网站规则
- 插件管理
- 插件操作 --- 基本使用
- 插件操作 --- 手机号脱敏插件
- 归档
- 更新日志
- 视频教程目录