Apache2 mod_security简单的默认拒绝特定目录的规则

如何为mod_securityconfiguration最简单有用的默认拒绝规则集?

我想configurationmod_security 允许非常具体的查询单个目录:

简而言之:我使用Apache作为目录/web_app/的反向代理,在这个目录中将是一个名为get.php的单个php文件。 我想传递给这个脚本只有匹配下面的正则expression式的查询:

 get \ .php \?ver = 1&id = [af \ d] {16,16}&v = [ - 。az \ d \] {1,20}

换句话说,只有三个字段的查询: idverv 。 首先是数字1,第二个是16位hex,第三个是至多20个字符的string,数字,点,连字符和空格。 它必须拒绝或从查询中除去POST和GET值,即:file upload,cookies,所有非必需的标题,除3以外的值等。

我不想改变任何其他目录的工作方式,只是/web_app/ 。 过滤掉错误的UTF或URL转义/编码不是一个问题,所以启用mod_security本身不应该是一个问题。

为了过滤argumetns,在整个uri中使用正则expression式有一个更简单的方法:

 <Location /web_app> SecFilterSelective ARG_NAMES "!^(id|ver|v)$" SecFilterSelective ARG_ver "!^1$" SecFilterSelective ARG_id "!^[af\d]{16,16}" SecFilterSelective ARG_v "!^[-\.az\d\ ]{1,20}" # Here the same for the request type SecFilterSelective REQUEST_METHOD "!^(GET|HEAD|POST)$" </Location> 

只有在/web_app下的列表中的任何参数都会匹配。

你可以在mod_security文档中find很好的例子: http : //www.modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/09-examples.html

所有其他参数也可以在那里find。

我想你需要这样的东西:

 <LocationMatch "^/web_app/"> SecRule REQUEST_URI "!(:?get\.php\?ver=1&id=([af\d]){16,16}&v=([-.az\d\ ]){1,20})" "id:123,phase:2, deny, status:406" </LocationMatch> 

对于REQUEST_METHOD,如果REQUEST_METHOD与您想要/允许的方法不匹配,则可以添加一个附加规则来阻止。