WAF规则

编解码

编解码可以对输入的参数值进行二次处理后,再跟对比值进行对比。以下是几个示例:

示例1:判断某个参数值的长度必须大于100

如果要想判断某个参数值的长度大于100,可以使用编解码的”计算长度”,规则内容如下:

  • 参数:单个URL参数值-[arg]
  • 参数名:name (比如要判断的是URL中的参数name)
  • 编解码:计算长度
  • 操作符:数值大于
  • 对比值:100

这样当用户输入的name参数长度大于100的时候就会匹配到此规则。

示例2:判断某个用户输入的某个Base64内容必须包含某个字符串

当用户输入Base64内容的时候,使用常规的手段无法进行对比,所以可以使用编解码中的”BASE64Decode”,规则内容如下:

  • 参数:单个URL参数值-[arg]
  • 参数名:name (比如要判断的是URL中的参数name)
  • 编解码:BASE64Decode
  • 操作符:包含字符串
  • 对比值:HelloWorld

这样当用户输入类似于”SGVsbG9Xb3JsZA==“的内容时,就能匹配到该规则。

示例3:判断经过转义的URL是否匹配某个规则

如果用户输入的内容中是经过转义的,可能会对我们的判断有所影响,比如:

id%3D%3B+DELETE+FROM+abc
针对这种情况,我们可以使用编解码中的URLDecode来对输入值进行解码后再对比:

  • 参数:所有URL参数组合-[args]
  • 参数名:name (比如要判断的是URL中的参数name)
  • 编解码:URLDecode
  • 操作符:正则匹配
  • 对比值:DELETE FROM

经过解码后,上面的一段内容会被解码成:

id=; DELETE FROM abc
所以就会和我们写的正则相匹配。

GoEdge文档