<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[PunBB Forums - [Mod] ColorCaptcha]]></title>
	<link rel="self" href="http://punbb.informer.com/forums/feed/atom/topic/20418/"/>
	<updated>2008-12-03T01:32:41Z</updated>
	<generator>PunBB</generator>
	<id>http://punbb.informer.com/forums/topic/20418/mod-colorcaptcha/</id>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120337/#p120337"/>
			<content type="html"><![CDATA[<p>Exactly what I said? I actually meant that you should edit the &#039;Captcha info&#039; string (and &#039;Invalid text&#039;, accordingly) in the $lang_pun_antispam array with the string I provided, and then use the <a href="http://php.net/sprintf">sprintf()</a> function to &quot;pass&quot; on the variable to the string when it is needed.</p><p>For example, if you open up &#039;lang/English/index.php&#039;, you&#039;ll notice that the first value says:<br /></p><div class="quotebox"><blockquote><p>Moderated by %s</p></blockquote></div><p>Why &quot;%s&quot;? Because on line 193 of &#039;index.php&#039; the <a href="http://php.net/sprintf">sprintf()</a> is used to replace it with the mod&#039;s username. I haven&#039;t really tried sprintf() with a $_SESSION variable, but it should definitely work.</p>]]></content>
			<author>
				<name><![CDATA[Garciat]]></name>
				<uri>http://punbb.informer.com/forums/user/12481/</uri>
			</author>
			<updated>2008-12-03T01:32:41Z</updated>
			<id>http://punbb.informer.com/forums/post/120337/#p120337</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120336/#p120336"/>
			<content type="html"><![CDATA[<p>Thanks very much for the reply, but I&#039;m not sure that would work, Garciat.&nbsp; It looks like the language file is loaded before the image is, so the only way to really pass the variable (as far as I can see) is a session variable.&nbsp; Are there any alternative methods?</p>]]></content>
			<author>
				<name><![CDATA[variousbagels]]></name>
				<uri>http://punbb.informer.com/forums/user/14363/</uri>
			</author>
			<updated>2008-12-02T23:20:31Z</updated>
			<id>http://punbb.informer.com/forums/post/120336/#p120336</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120298/#p120298"/>
			<content type="html"><![CDATA[<p>Can&#039;t you do something like</p><div class="codebox"><pre><code>$lang_pun_antispam[&#039;Captcha info&#039;] = &#039;Please enter &lt;i&gt;only&lt;/i&gt; the &lt;b&gt;&lt;font color=&quot;%1$s&quot;&gt;%1$s&lt;/font&gt;&lt;/b&gt; character(s) in the image.&#039;;</code></pre></div><p>then, when the string is needed</p><div class="codebox"><pre><code>sprintf($lang_pun_antispam[&#039;Captcha info&#039;], $_SESSION[&#039;use_color&#039;]);</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Garciat]]></name>
				<uri>http://punbb.informer.com/forums/user/12481/</uri>
			</author>
			<updated>2008-12-02T01:59:49Z</updated>
			<id>http://punbb.informer.com/forums/post/120298/#p120298</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120294/#p120294"/>
			<content type="html"><![CDATA[<div class="quotebox"><cite>parpalak wrote:</cite><blockquote><div class="quotebox"><cite>variousbagels wrote:</cite><blockquote><p>I decided to leave the numbers as they were because I suppose the PunBB developers had a reason for it.</p></blockquote></div><p>You can use any numbers or letters you prefer.<br /></p><div class="quotebox"><cite>variousbagels wrote:</cite><blockquote><p>The reason for the @&#039;s is to suppress the errors that would be generated by conflicting sessions.</p></blockquote></div><p>Is there errors in original pun_antispam extension? Please, post here error messages and describe when they appear.</p></blockquote></div><p>No, pun_antispam, the unmodded version, is error-free, as far as I can see.&nbsp; The problem with adding the features that Garciat suggested is that the language file needed to receive session variables. So when I added session_start to the pun_antispam language file, it interfered with the hooks that also started sessions.&nbsp; The extension still works because a session was started, though php returns a warning.</p>]]></content>
			<author>
				<name><![CDATA[variousbagels]]></name>
				<uri>http://punbb.informer.com/forums/user/14363/</uri>
			</author>
			<updated>2008-12-01T20:49:27Z</updated>
			<id>http://punbb.informer.com/forums/post/120294/#p120294</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120274/#p120274"/>
			<content type="html"><![CDATA[<div class="quotebox"><cite>variousbagels wrote:</cite><blockquote><p>I decided to leave the numbers as they were because I suppose the PunBB developers had a reason for it.</p></blockquote></div><p>You can use any numbers or letters you prefer.</p><div class="quotebox"><cite>variousbagels wrote:</cite><blockquote><p>The reason for the @&#039;s is to suppress the errors that would be generated by conflicting sessions.</p></blockquote></div><p>Is there errors in original pun_antispam extension? Please, post here error messages and describe when they appear.</p>]]></content>
			<author>
				<name><![CDATA[Parpalak]]></name>
				<uri>http://punbb.informer.com/forums/user/13581/</uri>
			</author>
			<updated>2008-12-01T12:02:10Z</updated>
			<id>http://punbb.informer.com/forums/post/120274/#p120274</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120254/#p120254"/>
			<content type="html"><![CDATA[<p><strong>Edit:</strong> Fixed a few bugs. The code below is now corrected.<br /></p><div class="quotebox"><cite>Garciat wrote:</cite><blockquote><p>You could make it more random by adding other colors (only 2 will be used on a single image), randomizing the color needed for the input (it&#039;s always red), adding some letters, and maybe using a longer string.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Garciat - Die hard</p><p>My Extensions and Me</p></blockquote></div><p>Your wish is my command.</p><p><strong>image.php</strong> has been changed to:<br /></p><div class="codebox"><pre><code>&lt;?php

/**
 * Generates a CAPTCHA picture
 *
 * @copyright Copyright (C) 2008 PunBB, partially based on code by Jamie Furness
 * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
 * @package pun_antispam
 * modified by James Anderson :)
 */

// Generate a random string
function pun_antispam_rand_str()
{
    return strtr(substr(strtolower(md5(uniqid(rand(), 1))), 2, 6), &#039;abcdef&#039;, &#039;165380&#039;);
}
//decide what color to use
function pun_antispam_random_color() {
    $random_color = rand(0, 2);
    switch($random_color) {
        case &quot;0&quot;;
        $use = &quot;red&quot;;
        break;
        case &quot;1&quot;;
        $use = &quot;blue&quot;;
        break;
        case &quot;2&quot;;
        $use = &quot;green&quot;;
        break;
    }
    return $use;
}

// Output CAPTCHA string into an image
function pun_antispam_image($string, $usecolor)
{
    $im      = imagecreatetruecolor(100, 18);
    // Make the background white
    imagefilledrectangle($im, 0, 0, 99, 17, 0xFFFFFF);
    //other colors
    $red     = imagecolorallocate($im, 255, 0, 0);
    $blue    = imagecolorallocate($im, 0, 0, 255);
    $green   = imagecolorallocate($im, 0, 168, 20);
    $noise   = imagecolorallocate($im, 255, 0, 0);
    $x = 0;
    while($x &lt;= 5) {
        $color = rand(0,2); //is this character red or blue? make it up
        $pallet = $pallet.$color;    //This attaches a number, 0 or 1, to each character, determining whether it is red or blue
                                    //pallet is an all numerical string. there are no letters in pallet
        $x++;
    }
    //if the first is red, the last has to be blue, and vice versa
    //this is to ensure that there will always be at least one red and at least one blue
    //also if the first one is blue, then the second one is green, and if the last one is blue, then the next to last one is green
    $pallet{0} = rand(0,1);
    if($pallet{0} == 1) { //the first one is blue
        $pallet{5} = 0; //the last one is red
        $pallet{1} = 2; //the second one is green
    }
    elseif($pallet{0} == 0) { //the first one is red
        $pallet{5} = 1; //the last one is blue
        $pallet{4} = 2; //the second to last one is green
    }
    $px      = rand(1,10); //moves it around a bit, x

//draw each character
//reads pallet to see whether the letter is red or blue
    $j = 0;
    while($j &lt;= 5) {
        $color = rand(0, 2);
        if($pallet{$j} == 0) {
            $y = rand(2,4);
            imagestring($im, 5, $px, $y, $string{$j}, $red);
            if($usecolor == &quot;red&quot;)
                $list .= $string{$j}; //make the list of red chars
        }
        elseif($pallet{$j} == 1) {
            $y = rand(2,4);
            imagestring($im, 5, $px, $y, $string{$j}, $blue);
            if($usecolor == &quot;blue&quot;)
                $list .= $string{$j}; //make the list of blue chars
        }
        elseif($pallet{$j} == 2) {
            $y = rand(2,4);
            imagestring($im, 5, $px, $y, $string{$j}, $green);
            if($usecolor == &quot;green&quot;)
                $list .= $string{$j}; //make the list of green chars
        }
        else { die(&quot;Something went wrong in pallet. It didn&#039;t make any colors.&quot;); }
        $j++;
        $px = $px + 15; //move for the next char
    }
    //make some noise
    while($k&lt;(100*18)/1000) { //where it says 1000, raise/lower the value to increase or decrease the noise leve. Higher numbers = LESS noise
        imageline($im, mt_rand(0,100), mt_rand(0,18), mt_rand(0,100), mt_rand(0,18), $noise);
        $k++;
    }
    sleep(1);
    header(&#039;Content-type:image/gif&#039;);
    header(&#039;Cache-Control: no-cache, must-revalidate&#039;);
    header(&#039;Expires: Mon, 26 Jul 1997 05:00:00 GMT&#039;);
    header(&#039;Pragma: no-cache&#039;);

    imagegif($im, null, 30);
    imagedestroy($im);

    return $list; //the list of red chars
}

session_start();
$pun_antispam_string = pun_antispam_rand_str();
$_SESSION[&#039;use_color&#039;] = pun_antispam_random_color();
$_SESSION[&#039;pun_antispam_text&#039;] = pun_antispam_image($pun_antispam_string, $_SESSION[&#039;use_color&#039;]);
?&gt;</code></pre></div><p>and please also modify <strong>pun_antispam.php</strong> to this:<br /></p><div class="codebox"><pre><code>&lt;?php
&lt;?php
if(!@defined($_SESSION)) {
    session_start();
}
// Language definitions used in pun_antispam
$lang_pun_antispam = array(
    &#039;Captcha&#039;                        =&gt;    &#039;Captcha&#039;,
    &#039;Captcha Info&#039;                    =&gt;    &#039;Please enter &lt;i&gt;only&lt;/i&gt; the &lt;b&gt;&lt;font color=&quot;&#039;.$_SESSION[&#039;use_color&#039;].&#039;&quot;&gt;&#039;.$_SESSION[&#039;use_color&#039;].&#039;&lt;/font&gt;&lt;/b&gt; character(s) in the image.&#039;,
    &#039;Invalid Text&#039;                    =&gt;    &#039;The captcha text you entered appears to be wrong. &lt;b&gt;Please &lt;i&gt;only&lt;/i&gt; enter the &lt;font color=&quot;&#039;.$_SESSION[&#039;use_color&#039;].&#039;&quot;&gt;&#039;.$_SESSION[&#039;use_color&#039;].&#039;&lt;/font&gt; character(s).&lt;/b&gt;&#039;,

    &#039;Captcha admin head&#039;            =&gt;    &#039;Setup which actions are protected by a captcha&#039;,
    &#039;Captcha admin info&#039;            =&gt;    &#039;You may enable captcha in certain areas of your forum if you are experiencing problems with spam.&#039;,
    &#039;Captcha admin legend&#039;            =&gt;    &#039;Enable Captcha&#039;,

    &#039;Captcha registrations info&#039;    =&gt;    &#039;Require a captcha before users may register. This can be helpful to stop spam.&#039;,
    &#039;Captcha login info&#039;            =&gt;    &#039;Require a captcha when logging in. This can be helpful to stop brute-force attacks.&#039;,
    &#039;Captcha reset info&#039;            =&gt;    &#039;Require a captcha to be entered when a user tries to reset their password.&#039;,
    &#039;Captcha guestpost info&#039;        =&gt;    &#039;Require a captcha for guest posting (if enabled one).&#039;
);
?&gt;</code></pre></div><p>Also modify <strong>post.php</strong> in your installation&#039;s root directory. Find<br /></p><div class="codebox"><pre><code>($hook = get_hook(&#039;po_end_validation&#039;)) ? eval($hook) : null;</code></pre></div><p>and change that to<br /></p><div class="codebox"><pre><code>($hook = get_hook(&#039;po_end_validation&#039;)) ? @eval($hook) : null;</code></pre></div><p><strong>Edit:</strong><br />And find in <strong>login.php</strong> in your installation&#039;s root directory</p><div class="codebox"><pre><code>($hook = get_hook(&#039;li_login_form_submitted&#039;)) ? eval($hook) : null;</code></pre></div><p>and change that to</p><div class="codebox"><pre><code>($hook = get_hook(&#039;li_login_form_submitted&#039;)) ? @eval($hook) : null;</code></pre></div><p>Find in <strong>login.php</strong> in your installation&#039;s root directory</p><div class="codebox"><pre><code>&lt;?php ($hook = get_hook(&#039;li_login_pre_remember_me_checkbox&#039;)) ? eval($hook) : null; ?&gt;</code></pre></div><p>and change that to</p><div class="codebox"><pre><code>&lt;?php ($hook = get_hook(&#039;li_login_pre_remember_me_checkbox&#039;)) ? @eval($hook) : null; ?&gt;</code></pre></div><br /><p>I decided to leave the numbers as they were because I suppose the PunBB developers had a reason for it. I also removed one of the pesky lines of code that was actually generating a random string from the already generated random string. That wasn&#039;t good... ;p<br />The reason for the @&#039;s is to suppress the errors that would be generated by conflicting sessions.&nbsp; In the end, there is only one session created.&nbsp; The errors are not visible because of the @&#039;s and won&#039;t interfere with anything.&nbsp; I didn&#039;t want to have to modify the hook for the extension which is the reason why I just added the @ in post.php instead of just removing the session_start in the hook.</p><p>Anyway, please keep up the feedback, I&#039;d like to improve it even more.</p>]]></content>
			<author>
				<name><![CDATA[variousbagels]]></name>
				<uri>http://punbb.informer.com/forums/user/14363/</uri>
			</author>
			<updated>2008-11-30T19:47:42Z</updated>
			<id>http://punbb.informer.com/forums/post/120254/#p120254</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120247/#p120247"/>
			<content type="html"><![CDATA[<p><span class="postimg"><img src="http://garciat.us.to/pics/image.php.gif" alt="http://garciat.us.to/pics/image.php.gif" /></span></p><p>You could make it more random by adding other colors (only 2 will be used on a single image), randomizing the color needed for the input (it&#039;s always red), adding some letters, and maybe using a longer string.</p>]]></content>
			<author>
				<name><![CDATA[Garciat]]></name>
				<uri>http://punbb.informer.com/forums/user/12481/</uri>
			</author>
			<updated>2008-11-30T18:53:51Z</updated>
			<id>http://punbb.informer.com/forums/post/120247/#p120247</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120230/#p120230"/>
			<content type="html"><![CDATA[<p>mmmm no</p>]]></content>
			<author>
				<name><![CDATA[fantasma]]></name>
				<uri>http://punbb.informer.com/forums/user/5116/</uri>
			</author>
			<updated>2008-11-30T08:59:35Z</updated>
			<id>http://punbb.informer.com/forums/post/120230/#p120230</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120226/#p120226"/>
			<content type="html"><![CDATA[<p>Glad you like it! Do you see anything that could be changed?</p>]]></content>
			<author>
				<name><![CDATA[variousbagels]]></name>
				<uri>http://punbb.informer.com/forums/user/14363/</uri>
			</author>
			<updated>2008-11-30T05:09:26Z</updated>
			<id>http://punbb.informer.com/forums/post/120226/#p120226</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120223/#p120223"/>
			<content type="html"><![CDATA[<p>Nice, thanks!</p>]]></content>
			<author>
				<name><![CDATA[fantasma]]></name>
				<uri>http://punbb.informer.com/forums/user/5116/</uri>
			</author>
			<updated>2008-11-30T01:19:51Z</updated>
			<id>http://punbb.informer.com/forums/post/120223/#p120223</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[[Mod] ColorCaptcha]]></title>
			<link rel="alternate" href="http://punbb.informer.com/forums/post/120222/#p120222"/>
			<content type="html"><![CDATA[<p><strong>In Practice</strong>: <a href="http://sirjtaa.com/forums/register.php">here</a><br /><strong>By Itself</strong>: <a href="http://sirjtaa.com/forums/extensions/pun_antispam/image.php">here</a><br /><strong>EDIT:</strong>: please see <a href="http://punbb.informer.com/forums/post/120254/#p120254">here</a> for the newer version.</p><p>I was tossing this idea around in my head for a while before I started using PunBB.&nbsp; The idea is simple: have the user differentiate between colors of characters.&nbsp; The user would only enter in the characters of a certain color to pass the captcha.&nbsp; It was meant to be easy for the user to understand but difficult for a bot to.&nbsp; The bot would try to enter in all of the letters, normally, and fail the test.<br />I&#039;m not saying that it&#039;s 100% uncrackable, which I&#039;m sure it isn&#039;t, but I think it is a nice idea.&nbsp; I have not seen this done anywhere before, but it might have been.<br />Here is the modified &quot;image.php&quot; code from the &quot;pun_antispam&quot; extension:<br /></p><div class="codebox"><pre><code>&lt;?php

/**
 * Generates a CAPTCHA picture
 *
 * @copyright Copyright (C) 2008 PunBB, partially based on code by Jamie Furness
 * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
 * @package pun_antispam
 * modified by James Anderson :)
 */

// Generate a random string
function pun_antispam_rand_str()
{
    return strtr(substr(strtolower(md5(uniqid(rand(), 1))), 2, 6), &#039;abcdef&#039;, &#039;165380&#039;);
}

// Output CAPTCHA string into an image
function pun_antispam_image($string)
{
    $im      = imagecreatetruecolor(100, 18);
    // Make the background white
    imagefilledrectangle($im, 0, 0, 99, 17, 0xFFFFFF);
    $red     = imagecolorallocate($im, 255, 0, 0);
    $blue    = imagecolorallocate($im, 0, 0, 255);
    $noise   = imagecolorallocate($im, 255, 0, 0);
    $x = 0;
    while($x &lt;= 5) {
        $usechars  .= substr($string, mt_rand(0, strlen($string)-1), 1);
        $color = rand(0,1); //is this character red or blue? make it up
        $pallet = $pallet.$color;    //This attaches a number, 0 or 1, to each character, determining whether it is red or blue
                                    //pallet is an all numerical string. there are no letters in pallet
        $x++;
    }
    $pallet{0} = rand(0,1); //if the first is red, the last has to be blue, and vice versa
    if($pallet{0} == 1) {   //this is to ensure that there will always be at least one red and at least one blue
        $pallet{5} = 0;
    }
    else {
        $pallet{5} = 1;
    }
    $px      = rand(1,10); //moves it around a bit, x

//draw each character
//reads pallet to see whether the letter is red or blue
    $j = 0;
    while($j &lt;= 5) {
        if($pallet{$j} == 0) {
            $y = rand(2,4);
            imagestring($im, 5, $px, $y, $usechars{$j}, $red);
            $list .= $usechars{$j}; //make the list of red chars
        }
        elseif($pallet{$j} == 1) {
            $y = rand(2,4);
            imagestring($im, 5, $px, $y, $usechars{$j}, $blue);
        }
        else { die(&quot;Something went wrong in pallet. It didn&#039;t make any colors.&quot;); }
        $j++;
        $px = $px + 15; //move for the next char
    }
    //make some noise
    while($k&lt;(100*18)/1000) { //where it says 1000, raise/lower the value to increase or decrease the noise leve. Higher numbers = LESS noise
        imageline($im, mt_rand(0,100), mt_rand(0,18), mt_rand(0,100), mt_rand(0,18), $noise);
        $k++;
    }
    sleep(1);
    header(&#039;Content-type:image/gif&#039;);
    header(&#039;Cache-Control: no-cache, must-revalidate&#039;);
    header(&#039;Expires: Mon, 26 Jul 1997 05:00:00 GMT&#039;);
    header(&#039;Pragma: no-cache&#039;);

    imagegif($im, null, 30);
    imagedestroy($im);

    return $list; //the list of red chars
}

session_start();

$pun_antispam_string = pun_antispam_rand_str();
$_SESSION[&#039;pun_antispam_text&#039;] = pun_antispam_image($pun_antispam_string);

?&gt;</code></pre></div><br /><p>And I modified the English language file (pun_antispam.php) too, to make it more obvious to the user:<br /></p><div class="codebox"><pre><code>&lt;?php

// Language definitions used in pun_antispam
$lang_pun_antispam = array(
    &#039;Captcha&#039;                        =&gt;    &#039;Captcha&#039;,
    &#039;Captcha Info&#039;                    =&gt;    &#039;Please enter &lt;i&gt;only&lt;/i&gt; the &lt;b&gt;&lt;font color=&quot;red&quot;&gt;red&lt;/font&gt;&lt;/b&gt; characters in the image.&#039;,
    &#039;Invalid Text&#039;                    =&gt;    &#039;The captcha text you entered appears to be wrong. &lt;b&gt;Please &lt;i&gt;only&lt;/i&gt; enter the &lt;font color=&quot;red&quot;&gt;red&lt;/font&gt; characters.&lt;/b&gt;&#039;,

    &#039;Captcha admin head&#039;            =&gt;    &#039;Setup which actions are protected by a captcha&#039;,
    &#039;Captcha admin info&#039;            =&gt;    &#039;You may enable captcha in certain areas of your forum if you are experiencing problems with spam.&#039;,
    &#039;Captcha admin legend&#039;            =&gt;    &#039;Enable Captcha&#039;,

    &#039;Captcha registrations info&#039;    =&gt;    &#039;Require a captcha before users may register. This can be helpful to stop spam.&#039;,
    &#039;Captcha login info&#039;            =&gt;    &#039;Require a captcha when logging in. This can be helpful to stop brute-force attacks.&#039;,
    &#039;Captcha reset info&#039;            =&gt;    &#039;Require a captcha to be entered when a user tries to reset their password.&#039;,
    &#039;Captcha guestpost info&#039;        =&gt;    &#039;Require a captcha for guest posting (if enabled one).&#039;
);

?&gt;</code></pre></div><p>Please feel free to make any further modifications if PunBB&#039;s license allows it.&nbsp; You can see this in practice <a href="http://sirjtaa.com/forums/register.php">here</a> and the image by itself <a href="http://sirjtaa.com/forums/extensions/pun_antispam/image.php">here</a>.</p><p>I also thought about this usage with colorblind users.&nbsp; Although the colors might not look like how a non-colorblind user sees, they would still be able to tell the difference between red and blue.&nbsp; The colorblind would most likely know how they see red and how they see blue, and could still pass the captcha.</p><p>Please leave any questions or comments, you can use this in <em>any way you&#039;d like</em> as long as it follows PunBB&#039;s license. I&#039;m actually not familiar with the license myself, so if I wasn&#039;t even allowed to edit this extension then I apologize. Please also feel free to make any improvements you can think of.</p>]]></content>
			<author>
				<name><![CDATA[variousbagels]]></name>
				<uri>http://punbb.informer.com/forums/user/14363/</uri>
			</author>
			<updated>2008-11-29T22:18:07Z</updated>
			<id>http://punbb.informer.com/forums/post/120222/#p120222</id>
		</entry>
</feed>
