Disclaimer: This is just a quick idea based on a Hacker News thread. There is a nice list here of existing solutions too.
All good and well, but: Can I use these from lynx
and without JavaScript?
The answer is no, as long as the browser cannot display images and/or JavaScript. Disappointing. Surely this is possible?
Wikipedia defines a CAPTCHA as:
A CAPTCHA (a contrived acronym for “completely automated public Turing test to tell computers and humans apart”) is a type of challenge–response test used in computing to determine whether or not the user is human.
So can it be text based? I think so. The important part of most CAPTCHAS are they are:
So the simple answer could be to generate a text representation of an image. Many picture-to-ASCII converters exist out there. But ASCII fonts are cool and could probably fool computers quite well. You could do the following:
Example starting font characters (generated here):
0001 ,---, /$$$$$$$ 0002 ' .' \ | $$__ $$ 0003 / ; '. | $$ \ $$ 0004 : : \ | $$$$$$$ 0005 : | /\ \ | $$__ $$ 0006 | : ' ;. : | $$ \ $$ 0007 | | ;/ \ \ | $$$$$$$/ 0008 ' : | \ \ ,' |_______/ 0009 | | ' '--' 0010 | : : 0011 | | ,' 0012 `--''
Overlay:
0013 ,---, /$$$$$$$ 0014 ' .' \ | $$__ $$ 0015 / ; '. | $$ \ $$ 0016 : : \ | $$$$$$$ 0017 : | /\ \| $$__ $$ 0018 | : ' ;. : $$ \ $$ 0019 | | ;/ \ \$$$$$$$/ 0020 ' : | \ \ ,'______/ 0021 | | ' '--' 0022 | : : 0023 | | ,' 0024 `--''
Random switching:
0025 ,-@-, /@$#$=$@ 0026 ' .' \ - $$__ $$ 0027 | ; '. | #$ \ $$ 0028 : : \ - ==$@$#$ 0029 : | /\ \| $$__ $$ 0030 l : ' ;. : @@ / #= 0031 | | ;/ / \$$#=$$@/ 0032 ' : | \ \ ,'=__-__/ 0033 | # ' '--' 0034 | : : 0035 = | ,' 0036 `--''
Random additions and subtractions:
0037 p -@-, o /@$#$=$ / 0038 ' .' \ - $$__ $ 0039 | ; . # $$ 0040 @ a \ - ==$@ #$ 0041 : r| \ \| $$__ $ 0042 l : ' ;. : @@ / #= 0043 | | ;/ / $#=$$@/ 0044 ' : | \ ,'=_ -__ 0045 # ' '- ' = £ 0046 | : : r @ -- | 0047 = ,' t # ~ 0048 ` -'' + _ + \ /
This was generated by hand - but I believe the point is clear. I believe a machine may struggle to read these letters, especially if an algorithm had made the changes. I believe this shows promise.
You would then prompt the user with something such as:
0049 Please type the above letters in the text box below. 0050 ______________ 0051 |______________| 0052 0053 [Submit] [Refresh]
This seems possible… When I get some free time I shall put this together.
There are some open problems:
These problems are unlikely and of course can be tackled in the future.