USG6680 IPS自定义规则设置HTTP请求的OrderField字段只允许输入数字输入不生效

发布时间:  2016-12-18 浏览次数:  137 下载次数:  0
问题描述

通过USG6680的IPS自定义实现HTTP请求(GET /xx/db/xxxxx_list.jsp?OrderField=491&OrderType=DESC HTTP/1.1)的OrderField字段只允许输入数字。通过上面的签名无法命中,如果正则表达式设定为“OrderField=”是可以命中的。

当前的IPS签名配置:

 ips signature-id 2

  name cms1

  protocol HTTP

  action block

   rule name OrderField

   scope message

    condition 1 field HTTP.URI operate pmatch value OrderField=(^\d)

 

处理过程

1. 修改正则表达式设定为“OrderField=”是可以命中的,说明安全策略配置没有问题,只是配置IPS模块的正则表达式存在问题;

2. 检查正则表达式书写规则,“()”在正则表达式中为“标记一个子表达式的开始和结束位置。”如果要修改为一个范围则需要使用“[]”,含义为“字符列表,可以通过连字符-指出一个字符范围。”手册中详细描述如下:

[ ]

字符列表,可以通过连字符-指出一个字符范围。不支持表2所列项。

  • [xyz]为正向字符集。例如,正则表达式[ab]可以匹配a或b。
  • [^xyz]为反向字符集。例如,正则表达式[^ab]可以匹配ab之外的所有字符。
  • [x-y]为范围字符集。例如,正则表达式[a-z]可以匹配小写字符a到z的所有字符。

( )

标记一个子表达式的开始和结束位置。

-

 因此,修改上述关键配置为: 

condition 1 field HTTP.URI operate pmatch value OrderField=[^\d]

修改后再次测试发现IPS功能正常。

根因

在自定义IPS签名的时候,正则表达式书写错误,如果要匹配一个范围那么需要使用的正则表达式为“[]”而不是“()”。

 

解决方案
修改上述关键配置为: 

condition 1 field HTTP.URI operate pmatch value OrderField=[^\d]后测试IPS功能正常。

END