SecRuleScript
描述:该指令可以创建一个特殊的规则,通过执行一个Lua脚本来对访问数据进行检测。该指定与SecRule的主要区别在于无需指定变量,也无需指定运算符,因为可以使用脚本从ModSecurity环境中获取所有变量并使用任何(Lua)运算符来进行检测。第二个可选参数是用于配置动作列表,与SecRule的动作列表用法相同。
语法:SecRuleScript /path/to/script.lua [ACTIONS]
用法示例:SecRuleScript“/path/to/file.lua”“block”
使用范围:所有配置文件中均可使用
版本:2.5.0-3.x
libModSecurity支持:是
注意:所有Lua脚本都在配置时编译并缓存在内存中。要重新加载脚本,您必须通过重新启动Apache来重新加载整个ModSecurity配置。
示例脚本:
-- Your script must define the main entry
-- point, as below.
function main()
-- Log something at level 1. Normally you shouldn't be
-- logging anything, especially not at level 1, but this is
-- just to show you can. Useful for debugging.
m.log(1, "Hello world!");
-- Retrieve one variable.
local var1 = m.getvar("REMOTE_ADDR");
-- Retrieve one variable, applying one transformation function.
-- The second parameter is a string.
local var2 = m.getvar("ARGS", "lowercase");
-- Retrieve one variable, applying several transformation functions.
-- The second parameter is now a list. You should note that m.getvar()
-- requires the use of comma to separate collection names from
-- variable names. This is because only one variable is returned.
local var3 = m.getvar("ARGS.p", { "lowercase", "compressWhitespace" } );
-- If you want this rule to match return a string
-- containing the error message. The message must contain the name
-- of the variable where the problem is located.
-- return "Variable ARGS:p looks suspicious!"
-- Otherwise, simply return nil.
return nil;
end
在这个例子中,我们只是检索一个变量。这种情况下变量的名称是已知的。但是,在许多情况下,您需要检查您不知道名称的变量,例如脚本参数。
使用m.getvars()一次性检索多个变量的示例如下:
function main()
-- Retrieve script parameters.
local d = m.getvars("ARGS", { "lowercase", "htmlEntityDecode" } );
-- Loop through the parameters.
for i = 1, #d do
-- Examine parameter value.
if (string.find(d[i].value, "<script")) then
-- Always specify the name of the variable where the
-- problem is located in the error message.
return ("Suspected XSS in variable " .. d[i].name .. ".");
end
end
-- Nothing wrong found.
return nil;
end
注意:访问http://www.lua.org/以查找更多关于Lua编程语言的信息。参考手册也可在线获取,网址为http://www.lua.org/manual/5.1/。
注意:Lua支持目前处于试验阶段,因为后续我们可能会支持更多的编程接口,而我们正在为寻找最佳的实现方式。我们非常欢迎更多的编程接口融入到我们的项目中。
注意:libModSecurity(aka v3)与Lua 5.2+兼容。
Created with the Personal Edition of HelpNDoc: Easy EPub and documentation editor