A while back I suggested a method of using timestamps to filter out at
least some automatic form postings. Now that I have tried it for
about 10 months, I thought it might useful to report back.
Briefly, the current time is encoded in a hidden form field when the
page containing it is served. The script that processes the form
checks the (new) current time against that in the form and rejects the
submission if it is either too fast or too slow. Unless the user
is super fast they see no effect at all. There are no accessibility
issues unless one sets the maximum permitted time too low. I currently
allow submissions from 5 seconds up to an hour after the form was
sent. Results suggest that this upper limit can safely be increased.
Even if a user is "caught", in both cases one can re-present the
form. In the case of a slow submission one would regenerate the time
stamp[1] and the user need only hit submit again.
Of course, the time stamp must be protected so that tampering could be
detected, although no examples of altered or missing timestamps showed
up in this test (which it hardly surprising, why would a bot alter
some mysterious hidden field?).
The method does seem to work well. The people seeing the submissions
report very little "spam" and there have been no complaints from users
being inconvenienced. I have not been able to study the submissions
that got through to count the failures, so all I have to go on is the
reports of "very little" spam and counts of blocked submissions.
Of the 1369 submissions in 42 weeks 518 were blocked by this method.
159 of these for being too fast and a surprising 359 for being too
slow -- way too slow. Only two of these are at all close to the one
hour cut-off time. I image many bots queue up the forms for
submission later. It seems they also keep trying without requesting
the form again since there are increasing time values later in the
test period.
The 5 second minimum look about right. The spread for fast reply
rejections was:
0s: 16
1s: 72
2s: 38
3s: 26
4s: 7
I can supply code if anyone else wants to try it.
[1] The ideal setting would be exactly 5 seconds (the minimum
submission time) old. A submit would then be accepted no matter how
fast the user was.
--
Ben.
least some automatic form postings. Now that I have tried it for
about 10 months, I thought it might useful to report back.
Briefly, the current time is encoded in a hidden form field when the
page containing it is served. The script that processes the form
checks the (new) current time against that in the form and rejects the
submission if it is either too fast or too slow. Unless the user
is super fast they see no effect at all. There are no accessibility
issues unless one sets the maximum permitted time too low. I currently
allow submissions from 5 seconds up to an hour after the form was
sent. Results suggest that this upper limit can safely be increased.
Even if a user is "caught", in both cases one can re-present the
form. In the case of a slow submission one would regenerate the time
stamp[1] and the user need only hit submit again.
Of course, the time stamp must be protected so that tampering could be
detected, although no examples of altered or missing timestamps showed
up in this test (which it hardly surprising, why would a bot alter
some mysterious hidden field?).
The method does seem to work well. The people seeing the submissions
report very little "spam" and there have been no complaints from users
being inconvenienced. I have not been able to study the submissions
that got through to count the failures, so all I have to go on is the
reports of "very little" spam and counts of blocked submissions.
Of the 1369 submissions in 42 weeks 518 were blocked by this method.
159 of these for being too fast and a surprising 359 for being too
slow -- way too slow. Only two of these are at all close to the one
hour cut-off time. I image many bots queue up the forms for
submission later. It seems they also keep trying without requesting
the form again since there are increasing time values later in the
test period.
The 5 second minimum look about right. The spread for fast reply
rejections was:
0s: 16
1s: 72
2s: 38
3s: 26
4s: 7
I can supply code if anyone else wants to try it.
[1] The ideal setting would be exactly 5 seconds (the minimum
submission time) old. A submit would then be accepted no matter how
fast the user was.
--
Ben.
Comment