For some rather non-obvious reason, spam bots are having fun posting totally random, most usually non readable messages (gibberish as in random letters and numbers) to public forms they find on the Internet.
Even for themselves, it seems to me that it would be a lot more effective to post useful messages and not blow away their chance from the start.
Yet, many of these bots are quite retarded and can be prevented to post uselessly using a few tricks as follow:
You can include a form identifier in all your public forms. This may not sound like it, but by itself it is very effective against most bots. For some reasons, bots will read the form and send a POST not including the valid identifier (because they reuse the same over and over again.)
There is one drawback with this technique. The identifier cannot be cached or all the users get the same number, including the bots for a long period of time. It is still a good idea to verify that you indeed generated that form at some point. Otherwise bots will send you all sorts of randomly generated forms...
Using CSS, one can hide a field. Having a mechanism to generate a hidden field with or without data has a very interesting side effect. 99% of the bots will not go as far as determining whether a field is hidden (and anyway it is not that easy to read a big pile of CSS and determine such.) So that field is hidden to your normal users (assuming that the CSS is loaded properly) but visible to bots. What will bots do? Change the value of the hidden field with something else. At that point you know that a bot sent the POST because that field should not possibly be changed by one of your regular users.
To strengthen this feature, more than one hidden field can be included in a single form.
CAPTCHA are systems to detect whether someone posting is a human. Most people do not like them and more often than not they are hard to answer. Our system may offer the feature at some point but not as a default! We generally want to try many other methods first.
The form preparation can include many features such as: