TODO
----
- (fix it or leave it?) statistics by variable_set is too slow - it clears vaiable cache in variable_set
- Allow recipe to be used multiple times. (different secret - hash should not collide)
- Add hash collision detection (form_elements, url_elements)
- Create and describe IRecipe to make implementation of new recipes easier
- Replace getProperty with more transparent solution
Development roadmap
-------------------
- DONE Keep blocked/passed statistics
- DONE Select forms to be protected
- Recipe description language
?- Site hash (any need to make something on top of botcha_secret variable?)
- Recipe update service
- CRON: call home, report self, get list of updates, cache it, load in chunks
- More recipes
- DONE D7
Ideas For Implementation
------------------------
- Implement different recipies, enable by on/of setting, all recipies are additive
Recipies:
- obscure "magic" fields by adding a bunch of bugus hidden fields
==== CSS+JS (verify bot is not executing JS or not loading CSS):
- CSS is separate file (important), JS takes CSS attribute to calculate submission field setting
==== JS (verify bot is not executing JS, but legitimate user can also disable JS):
DONE - JS Change post variable
- JS Change post variable to a hash value
- JS Change post URL
DONE - JS Change URL variable
- JS Change URL variable to a hash value
- JS Change submit button value (to a hash value)
- JS Remove an input field completely
- JS Convert a hidden field into an input field (?)
- JS Change a hidden field (to a hash value) (bots are smart enough to leave them alone)
DONE - JS + Honeypot field / hidden by CSS
==== completely server-side:
- Shuffle field names
- Encrypt field names (except [some] honeypots
- Verify all variables that are submitted - reject if any extra fields appeared
- linked javascript file using 'document.write' to append the form
- Server delays certain forms (e.g. user/register) to slow down spambot scripts
==== CAPTCHA strengthening:
- Limit time to submit captcha
==== FORM strengthening:
DONE - allow form post only once. invalidate form token. Next submit will fail.
- minimum time check - submitted too early (2..3 seconds)
- register form filters out any submissions with http://
- block suspicious/empty useragent string, compare form build vs form submit
==== COOKIE-based (needs JS)
- save a cookie, then JS uses that cookie to fill a validation field
- set a cookie by javascript then retrieve the cookie during form processing in the cgi script
View source
-
- TODO
- ----
- - (fix it or leave it?) statistics by variable_set is too slow - it clears vaiable cache in variable_set
- - Allow recipe to be used multiple times. (different secret - hash should not collide)
- - Add hash collision detection (form_elements, url_elements)
- - Create and describe IRecipe to make implementation of new recipes easier
- - Replace getProperty with more transparent solution
-
-
- Development roadmap
- -------------------
- - DONE Keep blocked/passed statistics
- - DONE Select forms to be protected
- - Recipe description language
- ?- Site hash (any need to make something on top of botcha_secret variable?)
- - Recipe update service
- - CRON: call home, report self, get list of updates, cache it, load in chunks
- - More recipes
- - DONE D7
-
-
-
- Ideas For Implementation
- ------------------------
- - Implement different recipies, enable by on/of setting, all recipies are additive
- Recipies:
- - obscure "magic" fields by adding a bunch of bugus hidden fields
- ==== CSS+JS (verify bot is not executing JS or not loading CSS):
- - CSS is separate file (important), JS takes CSS attribute to calculate submission field setting
- ==== JS (verify bot is not executing JS, but legitimate user can also disable JS):
- DONE - JS Change post variable
- - JS Change post variable to a hash value
- - JS Change post URL
- DONE - JS Change URL variable
- - JS Change URL variable to a hash value
- - JS Change submit button value (to a hash value)
- - JS Remove an input field completely
- - JS Convert a hidden field into an input field (?)
- - JS Change a hidden field (to a hash value) (bots are smart enough to leave them alone)
- DONE - JS + Honeypot field / hidden by CSS
- ==== completely server-side:
- - Shuffle field names
- - Encrypt field names (except [some] honeypots
- - Verify all variables that are submitted - reject if any extra fields appeared
- - linked javascript file using 'document.write' to append the form
- - Server delays certain forms (e.g. user/register) to slow down spambot scripts
- ==== CAPTCHA strengthening:
- - Limit time to submit captcha
- ==== FORM strengthening:
- DONE - allow form post only once. invalidate form token. Next submit will fail.
- - minimum time check - submitted too early (2..3 seconds)
- - register form filters out any submissions with http://
- - block suspicious/empty useragent string, compare form build vs form submit
- ==== COOKIE-based (needs JS)
- - save a cookie, then JS uses that cookie to fill a validation field
- - set a cookie by javascript then retrieve the cookie during form processing in the cgi script
-
-
-
-