本节介绍了如何为参数配置使用正则表达式匹配的 WAF 例外。NSX Advanced Load Balancer 支持使用正则表达式进行 URL 匹配。

NSX Advanced Load Balancer WAF 使用 PCRE(Perl 兼容正则表达式)作为正则表达式。NSX Advanced Load Balancer 支持为参数配置正则表达式。WAF 策略中的 match_element 字段可以配置为使用正则表达式,而不只是一个关键字。

通过 CLI 为参数配置正则表达式匹配

  1. 登录控制器 Shell,然后输入相应命令以编辑所需的 WAF 策略。

  2. 通过键入斜杠(“/”),然后键入关键字 match_element_criteria,来搜索 match_element_criteria

  3. match_element 字段中配置所需的正则表达式,如下所示。在 match_element 下,将 match_case 字段设置为 SENSITIVE,并将 match_op 字段设置为 REGEX_MATCH

     exclude_list:
            - match_element: ARGS:regex
              match_element_criteria:
                match_case: SENSITIVE
                match_op: REGEX_MATCH
              uri_match_criteria:
                match_case: SENSITIVE
                match_op: REGEX_MATCH
              uri_path: ^/test.php

  4. Esc,然后输入 :wq

  5. 键入 save 以保存配置。

    save

配置示例

参数名称可以具有多个固定和动态部分。请考虑如下 URL 示例:

https://appname.com/typo/test_doc.php?data[news][1234][body]=Some_long_text_expected

其中,data[news][" and "][body] 是固定部分,数字 [1234] 是一个动态值,它会随每个请求而变化。针对此应用程序的一个示例攻击如下所示:

https://appname.com/typo/test_doc.php?data[news][1234][body]=%3Cscript%3Ealert(1)%3C/script%3E

为此示例创建例外所需的正则表达式为:

URL Regex:              ^/typo/test_doc.php
Match element Regex:    ARGS:.data\[news\]\[.*\]\[body\]

使用 ARGS:.data(而非 ARGS:data)让其成为有效的正则表达式。

WAF 策略配置如下所示:

exclude_list:
 - match_element: ARGS:data\[news\]\[.*\]\[body\]
   match_element_criteria:
     match_case: SENSITIVE
     match_op: REGEX_MATCH
   uri_match_criteria:
     match_case: SENSITIVE
     match_op: REGEX_MATCH
   uri_path: ^/typo/test_doc.php

通过 UI 为参数配置正则表达式匹配

  1. NSX Advanced Load Balancer UI 中,导航到模板 > WAF > WAF 策略。单击要编辑的策略,或者根据需要创建新策略。

  2. 规则选项卡下,导航到规则集下面的相关规则。单击规则对应的下拉菜单以展开配置选项。单击 + 添加例外以配置例外。

  3. 例外字段下面输入正则表达式,然后选中正则表达式匹配复选框。

  4. 保存配置。