描述:该指令可以创建一个特殊的规则,通过执行一个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