如何为mod_security
configuration最简单有用的默认拒绝规则集?
我想configurationmod_security
只允许非常具体的查询单个目录:
简而言之:我使用Apache作为目录/web_app/
的反向代理,在这个目录中将是一个名为get.php
的单个php文件。 我想传递给这个脚本只有匹配下面的正则expression式的查询:
get \ .php \?ver = 1&id = [af \ d] {16,16}&v = [ - 。az \ d \] {1,20}
换句话说,只有三个字段的查询: id
, ver
和v
。 首先是数字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与您想要/允许的方法不匹配,则可以添加一个附加规则来阻止。