:: detour to confirm hunch ::
The exact UA string
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
is one of my mod_security triggers. In fact it's almost the only one I can find in recent days, except one case of the bare
Mozilla/5.0
and-that-was-all-she-wrote.
:: further study of error logs ::
Hm, now that's interesting. That particular offender made 15 requests, of which 13 made it to error logs. This one turned out to be part of the "nyet.gif" botnet, where they first try to PUT a file and then GET the same one. So the sequence goes:
403 for PUT method
404 for "nyet.gif"
two 418 for request matching "ofc_upload_image.php"
301 for "index.html"
two 403 for request ending in .php
418 for request matching very long name pattern that I won't paste in
two 403 for request ending in .php
404 again for "nyet.gif"
two more 418 for "ofc_upload_image.php"
301 for "index.html"
and a final 403 again for request in .php
It's illuminating to see just how many different ways a request can fail even when it's an unknown IP (this one turned out to be from Hong Kong, which is not yet subject to my universal China lockout, though it probably should be).
A 400 may be a smidgen less work for the server, because most humans don't generate 400 errors so there's no need for a custom error page. (Yes, contrary to widespread belief it
is possible for a legitimate human with no ill intentions to get a perfectly natural 403.)