The Dot character
One of the most ubiquitous characters in regular expressions is the dot. It matches any character, so the regex d.g
will match both dog
and dig
. (Actually, there is one exception to "dot matches all", and that is a newline character or pair of characters—this is usually not matched by dot unless specially configured in the regex engine's options. In the case of ModSecurity and PCRE, the "dot matches all" flag is set at compile time, so a dot when used in a ModSecurity rule will really match any character.)
The fact that dot matches anything means that you need to be careful using it in things such as IP addresses as for example the regex 1.2.2.33
will match not only the IP address 1.2.2.33 but also the first part of addresses such as 1.222.33.45.
The solution is to escape the dot by prefixing it with a backslash. The backslash means that the next character should be interpreted literally, and hence the dot will only match an actual dot when preceded by a backslash. So to match only the IP address 1.2.2.33 and nothing else, you would use the regex 1\.2\.2\.33
which will avoid any unpleasant surprises.