ch17s02.html
9.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Captcha generation</title><link rel="stylesheet" type="text/css" href="manual.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.0"><link rel="home" href="index.html" title="JpGraph Manual"><link rel="up" href="ch17.html" title="Chapter 17. Additional graph types"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Captcha generation</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center">Chapter 17. Additional graph types</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="sect1" title="Captcha generation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2577246"></a>Captcha generation</h2></div></div></div>
<p>Captcha is an acronym for "<span class="italic">Completely Automated Public Turing
test to tell Computers and Humans Apart.</span>" and is often used to prevent
automatic sign-ups in various WEB-based applications.</p>
<p>The library support generation of a simple captchas based on hand drawn "ugly" letters
and digits. They are combined into a word which can be presented as an image.</p>
<p>
</p><div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3>
<p>It should be noted that with ample processing power and modern image analysis
it is probably not hat difficult to actually break these captchas so the usage
of these captchas in mission critical environments is entirely the
responsibility of the user.</p>
</div><p>
</p>
<p>The module in the library that is needed is
"<code class="filename">jpgraph_antispam.php</code>" and behaves as a simplified plot module. </p>
<p>?? showsn an example on how this can look</p>
<p>
</p><div class="figure"><a name="fig.antispamex01"></a><p class="title"><b>Figure 17.21. Sample illustration of captcha challenge <code class="uri"><a class="uri" href="example_src/antispamex01.html" target="_top">(<code class="filename">antispamex01.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/antispamex01.png" alt="Sample illustration of captcha challenge (antispamex01.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>Captcha images have less functionality then the usual graphs generated with the
library in order to keep this utility reasonable small. The primary limitation is that
there are no additional formatting options for the images and the image generated will
always use the JPEG image format. Hence it is not possible to change this to use, for
example, PNG format.</p>
<div class="sect2" title="Generating Captchas"><div class="titlepage"><div><div><h3 class="title"><a name="id2578426"></a>Generating Captchas</h3></div></div></div>
<p>There are two basic alternatives on how to generate the content of the
captcha</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>Submit a string that should be used</p>
</li><li class="listitem">
<p>Automatically generate a random string. If this alternative is chosen
then the user of the library should save the created string and compare
it to what the user enters.</p>
</li></ol></div><p>
</p>
<p>In order to write a script to generate a new challenge there are four steps to be
completed.</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>include the library file "<code class="filename">jpgraph_antispam.php</code>".
Note that there is no need to include the
"<code class="filename">jpgraph.php</code>" library since all functionality
is included in this library file.</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">require_once "jpgraph_antispam.php";</span></pre></td></tr></table></div><p>
</p>
</li><li class="listitem">
<p>a new instance of the class AntiSpam must be created</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$spam = new AntiSpam();</span></pre></td></tr></table></div><p>
</p>
</li><li class="listitem">
<p>the string to be used in the challenge must be specified. To
automatically generate a suitable string use</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">// The argument determines the length of the generated string
$chars = $spam-> Rand(5);</span></pre></td></tr></table></div><p>
</p>
<p>If instead the string to be used should be specified this string
should be specified in the initial creation of the
<code class="code">AntiSpam()</code> or by calling the <code class="code">Set()</code> method
as in</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$spam-> Set('aui8k');</span></pre></td></tr></table></div><p>
</p>
<p>Please note that in order to minimize the risk for confusion the
letters 'O' and the number '0' (zero) is not allowed since they are too
alike and can be mistaken for each other.</p>
</li><li class="listitem">
<p>output the image with a call the method <code class="code">Stroke()</code> on the
created instance of the AntiSpam class.</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">if( $spam->Stroke () === false ) {
die("Illegal or no data to plot");
}</span></pre></td></tr></table></div><p>
</p>
<p>Note that we have put a guard around the output since in the case of
an error this method will result a boolean false value. As with the
other graph types it is possible to write the generated image to a file
by submitting a file name as an argument to Stroke().</p>
</li></ol></div><p>
</p>
<p>In order to practically use this module the challenge string is most likely passed
to the image script via a URL argument, saved to a file and the read back in the
HTML page that is providing the captcha challenge.</p>
<p>
</p><div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3>
<p>It should be pointed out on more time that modern image analysis
technology is fairly good at automatically read these types of images and
translate it back to the letters they represent so this type of captchas
does not provide any guarantee for automatic sign-ups. There are active
academic research on how to apply various types of artificial intelligence
to read many types of captchas. </p>
</div><p>
</p>
</div>
</div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"><a accesskey="u" href="ch17.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>