# 插件
插件操作是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
```
看一下實際引用(高級規則)和對應的注釋

* 函數名稱: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 得到的效果

- kcon 兵器譜
- 演示 1
- 演示 2
- 演示 3
- 演示 4
- 演示 5
- 前言
- 安裝
- 更新
- 登錄后臺
- 授權認證
- 集群配置
- 7層防護 -- 最佳實踐
- 匹配位置說明
- 匹配方式說明
- 規則匹配詳解
- 全局 - CDN規則
- 添加header頭配置
- 限速limit配置
- 緩存proxy_cache配置
- 清除緩存
- 全局 - 獲取真實IP配置
- 全局 - IP黑白名單
- 全局 - 域名方法配置(白名單)
- 全局 - 跳轉規則配置
- 全局 - 高級規則配置
- 全局 - 普通規則配置
- 全局 - 頻率規則配置
- 全局 - 內容替換規則
- 內容替換規則(插件使用)
- 全局 - 攔截信息配置
- 全局 - LOG規則配置
- 平臺配置
- 基本配置
- 高級配置
- 配置文件管理
- 4 層代理
- 轉發配置
- 插件管理
- 防護配置
- 網站管理
- 證書管理
- 域名管理
- 網站規則
- 插件管理
- 插件操作 --- 基本使用
- 插件操作 --- 手機號脫敏插件
- 歸檔
- 更新日志
- 視頻教程目錄