<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: WP-Gatekeeper</title>
	<atom:link href="http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/feed/" rel="self" type="application/rss+xml" />
	<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/</link>
	<description>Things that Eric A. Meyer, CSS expert, writes about on his personal Web site; it&#039;s largely Web standards and Web technology, but also various bits of culture, politics, personal observations, and other miscellaneous stuff</description>
	<lastBuildDate>Fri, 19 Mar 2010 00:27:46 -0400</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: How to avoid spam? &#124; paul olyslager</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-484770</link>
		<dc:creator>How to avoid spam? &#124; paul olyslager</dc:creator>
		<pubDate>Tue, 24 Nov 2009 08:13:17 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-484770</guid>
		<description>[...] questions into the form, which needs to be answered by the visitor. Eric Meyer wrote an article at WP-gatekeeper about this. He suggested to ask simple questions, eg. &#8220;what is Eric&#8217;s first [...]</description>
		<content:encoded><![CDATA[<p>[...] questions into the form, which needs to be answered by the visitor. Eric Meyer wrote an article at WP-gatekeeper about this. He suggested to ask simple questions, eg. &#8220;what is Eric&#8217;s first [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: DigitalMan</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-222480</link>
		<dc:creator>DigitalMan</dc:creator>
		<pubDate>Mon, 20 Aug 2007 15:33:06 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-222480</guid>
		<description>A colleague of mine just had an idea. What about using an image button for the submit button which would pass in the x/y coordinates? If the way spammers are exploiting this is by posting to the form from elsewhere it seems that even checking the referring url might work.</description>
		<content:encoded><![CDATA[<p>A colleague of mine just had an idea. What about using an image button for the submit button which would pass in the x/y coordinates? If the way spammers are exploiting this is by posting to the form from elsewhere it seems that even checking the referring url might work.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Defeating contact form spam by hiding the webmail script &#124; Ardamis.com</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-202087</link>
		<dc:creator>Defeating contact form spam by hiding the webmail script &#124; Ardamis.com</dc:creator>
		<pubDate>Thu, 12 Jul 2007 16:59:21 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-202087</guid>
		<description>[...] correctly answered before the form could be submitted. Eric Meyer wrote a very inspiring piece at WP-Gatekeeper on the use of easily human-comprehensible challenge questions like &#8220;What is Eric&#8217;s [...]</description>
		<content:encoded><![CDATA[<p>[...] correctly answered before the form could be submitted. Eric Meyer wrote a very inspiring piece at WP-Gatekeeper on the use of easily human-comprehensible challenge questions like &#8220;What is Eric&#8217;s [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Wordpress Comment Plugins: Building A Fortress To Defend Against Spam! at MUSicTECHnology.net</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-118457</link>
		<dc:creator>Wordpress Comment Plugins: Building A Fortress To Defend Against Spam! at MUSicTECHnology.net</dc:creator>
		<pubDate>Wed, 28 Mar 2007 05:45:32 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-118457</guid>
		<description>[...] there are a couple of other great plugins that are similar like Meyerweb&#8217;s WP-Gatekeeper&#160;, &#160;Did You PASS Math?, ΛορδΧηαος&#8217;s Challenge Plugin and Captcha!, I am a [...]</description>
		<content:encoded><![CDATA[<p>[...] there are a couple of other great plugins that are similar like Meyerweb&#8217;s WP-Gatekeeper&nbsp;, &nbsp;Did You PASS Math?, ΛορδΧηαος&#8217;s Challenge Plugin and Captcha!, I am a [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: asss@assss.sss</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-52916</link>
		<dc:creator>asss@assss.sss</dc:creator>
		<pubDate>Fri, 22 Sep 2006 18:22:27 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-52916</guid>
		<description>Hey... Just testing the plugin works!</description>
		<content:encoded><![CDATA[<p>Hey&#8230; Just testing the plugin works!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Spam Blocker Michael</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-29197</link>
		<dc:creator>Spam Blocker Michael</dc:creator>
		<pubDate>Wed, 17 May 2006 06:43:08 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-29197</guid>
		<description>&gt;No image CAPTCHAs. Too many accessibility problems, and too easy to &gt;defeat. 

Hmmm...I am wondering how far a spammer would go especially when he/she has to crack a image security code.

They might hire some cheap chinese worker to send their spam by entering each time the image security code.
</description>
		<content:encoded><![CDATA[<p>&gt;No image CAPTCHAs. Too many accessibility problems, and too easy to &gt;defeat. </p>
<p>Hmmm&#8230;I am wondering how far a spammer would go especially when he/she has to crack a image security code.</p>
<p>They might hire some cheap chinese worker to send their spam by entering each time the image security code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Web Communication Link Relationships - Lachy’s Log</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-25864</link>
		<dc:creator>Web Communication Link Relationships - Lachy’s Log</dc:creator>
		<pubDate>Sun, 30 Apr 2006 23:51:59 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-25864</guid>
		<description>[...] es, on the condition that it is removed after moderation. 		Of course, there are much better 		ways to block spam that sho [...]</description>
		<content:encoded><![CDATA[<p>[...] es, on the condition that it is removed after moderation.<br />
 		Of course, there are much better<br />
 		ways to block spam that sho [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: yo</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-12586</link>
		<dc:creator>yo</dc:creator>
		<pubDate>Tue, 17 Jan 2006 16:26:59 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-12586</guid>
		<description>yo, test.</description>
		<content:encoded><![CDATA[<p>yo, test.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: What makes you happy ? &#187; Gatekeeper in.</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-10218</link>
		<dc:creator>What makes you happy ? &#187; Gatekeeper in.</dc:creator>
		<pubDate>Wed, 14 Dec 2005 15:20:20 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-10218</guid>
		<description>[...] ich I have always quite liked when using it on other&#8217;s blogs - is Eric Meyer&#8217;s Gatekeeper. I pose a range of quetions, you answer them. So it is now installed and r [...]</description>
		<content:encoded><![CDATA[<p>[...] ich I have always quite liked when using it on other&#8217;s blogs &#8211; is Eric Meyer&#8217;s Gatekeeper. I pose a range of quetions, you answer them. So it is now installed and r [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TRAE</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-9412</link>
		<dc:creator>TRAE</dc:creator>
		<pubDate>Sat, 26 Nov 2005 02:04:25 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-9412</guid>
		<description>great plugin man. and it&#039;s better than CAPTCHA cos it&#039;s blind-people friendly. But you guys should include this in the instructions:

&quot;after installing you have to log out of your wordpress control panel if you want to test it, because by default the challenge is not posed for the administrator (you)&quot;.

i wonder why you should create this plugin and not use it on your own site (this blog). that&#039;s kind off ironic don&#039;t you think. well great plugin all the same. peace!</description>
		<content:encoded><![CDATA[<p>great plugin man. and it&#8217;s better than CAPTCHA cos it&#8217;s blind-people friendly. But you guys should include this in the instructions:</p>
<p>&#8220;after installing you have to log out of your wordpress control panel if you want to test it, because by default the challenge is not posed for the administrator (you)&#8221;.</p>
<p>i wonder why you should create this plugin and not use it on your own site (this blog). that&#8217;s kind off ironic don&#8217;t you think. well great plugin all the same. peace!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kingyo Senbei</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-6388</link>
		<dc:creator>Kingyo Senbei</dc:creator>
		<pubDate>Sun, 11 Sep 2005 12:14:12 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-6388</guid>
		<description>&lt;strong&gt;Blog Spam&lt;/strong&gt;

Having had serious spam when using MoveableType and after transferring to Wordpress I decided I needed to take drastic action.
I was on the uni server when I used MT, but it didn&#8217;t have the PHP graphics module so the Captcha didn&#8217;t work. I ...</description>
		<content:encoded><![CDATA[<p><strong>Blog Spam</strong></p>
<p>Having had serious spam when using MoveableType and after transferring to Wordpress I decided I needed to take drastic action.<br />
I was on the uni server when I used MT, but it didn&#8217;t have the PHP graphics module so the Captcha didn&#8217;t work. I &#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jaya</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-5469</link>
		<dc:creator>jaya</dc:creator>
		<pubDate>Wed, 06 Apr 2005 09:44:59 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-5469</guid>
		<description>I have dowloaded from http://meyerweb.com/eric/tools/wordpress/wp-gatekeeper.html, but the version that I read is 1.5RC1. That site say that the version is 1.5RC2. I found http://dev.wp-plugins.org/browser/wp-gatekeeper/. So, what version (the latest) should I monitoring? from this site or from dev.wp-plugins.org? I like this script very much, there is no accessibility problem.</description>
		<content:encoded><![CDATA[<p>I have dowloaded from <a href="http://meyerweb.com/eric/tools/wordpress/wp-gatekeeper.html" rel="nofollow">http://meyerweb.com/eric/tools/wordpress/wp-gatekeeper.html</a>, but the version that I read is 1.5RC1. That site say that the version is 1.5RC2. I found <a href="http://dev.wp-plugins.org/browser/wp-gatekeeper/" rel="nofollow">http://dev.wp-plugins.org/browser/wp-gatekeeper/</a>. So, what version (the latest) should I monitoring? from this site or from dev.wp-plugins.org? I like this script very much, there is no accessibility problem.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Sauyet</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-5118</link>
		<dc:creator>Scott Sauyet</dc:creator>
		<pubDate>Wed, 23 Feb 2005 23:22:33 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-5118</guid>
		<description>Oops, typos in my previous:

http://tinyurl.com/4hcw2#comment-340

Then the table would need to hold only the questions and &lt;strong&gt;their&lt;/strong&gt; answers

Sorry,

  -- Scott</description>
		<content:encoded><![CDATA[<p>Oops, typos in my previous:</p>
<p><a href="http://tinyurl.com/4hcw2#comment-340" rel="nofollow">http://tinyurl.com/4hcw2#comment-340</a></p>
<p>Then the table would need to hold only the questions and <strong>their</strong> answers</p>
<p>Sorry,</p>
<p>  &#8212; Scott</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Sauyet</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-5117</link>
		<dc:creator>Scott Sauyet</dc:creator>
		<pubDate>Wed, 23 Feb 2005 23:19:59 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-5117</guid>
		<description>Amazing how so many people hit on similar solutions.  After someone last week pointed me (http://tinyurl.com/4hcw2#comment-340) to http://www.syndic8.com/~jeff/blog/index.php?p=103, I started designing an almost identical solution.  I happened to stumble across this one today.  I really like the simple interface.  I haven&#039;t gotten it to work on my site since I&#039;m on WP 1.5, but I&#039;m sure I could get it in if I want.  

I have one suggestion, though.  Instead of keys stored in the database, why not send a hash of the correct answer, together with some static, but private string, in a hidden variable?  Then the table would need to hold only the questions and there answers, and the verification wouldn&#039;t need to take a DB hit.

&lt;code&gt;		$key= &#039; &lt;input name=&quot;key&quot; type=&quot;hidden&quot; value=&quot;&#039; . md5($challenges[$cr]-&gt;passcode . &quot;secret string&quot;) . &#039;&quot;&#039; . $closeslash . &#039;&gt; &#039;;&lt;/code&gt;

And then you can do hash the returned answer and compare the results.    Does this make sense?</description>
		<content:encoded><![CDATA[<p>Amazing how so many people hit on similar solutions.  After someone last week pointed me (<a href="http://tinyurl.com/4hcw2#comment-340" rel="nofollow">http://tinyurl.com/4hcw2#comment-340</a>) to <a href="http://www.syndic8.com/~jeff/blog/index.php?p=103" rel="nofollow">http://www.syndic8.com/~jeff/blog/index.php?p=103</a>, I started designing an almost identical solution.  I happened to stumble across this one today.  I really like the simple interface.  I haven&#8217;t gotten it to work on my site since I&#8217;m on WP 1.5, but I&#8217;m sure I could get it in if I want.  </p>
<p>I have one suggestion, though.  Instead of keys stored in the database, why not send a hash of the correct answer, together with some static, but private string, in a hidden variable?  Then the table would need to hold only the questions and there answers, and the verification wouldn&#8217;t need to take a DB hit.</p>
<p><code>		$key= ' &lt;input name="key" type="hidden" value="' . md5($challenges[$cr]-&gt;passcode . "secret string") . '"' . $closeslash . '&gt; ';</code></p>
<p>And then you can do hash the returned answer and compare the results.    Does this make sense?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard Peng</title>
		<link>http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-5022</link>
		<dc:creator>Richard Peng</dc:creator>
		<pubDate>Mon, 14 Feb 2005 01:39:00 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comment-5022</guid>
		<description>I have a solution that might also have potential. It might work if you added radio buttons of which you had to click on the correct randomly selected button before posting. I&#039;m not sure if spammers can fill out radio buttons as of yet. Combine that with another challenge and it might be complicated for spammers, but not for humans.</description>
		<content:encoded><![CDATA[<p>I have a solution that might also have potential. It might work if you added radio buttons of which you had to click on the correct randomly selected button before posting. I&#8217;m not sure if spammers can fill out radio buttons as of yet. Combine that with another challenge and it might be complicated for spammers, but not for humans.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head profile="http://gmpg.org/xfn/1">
<title>meyerweb.com</title>
<link rel="openid.server" href="http://www.myopenid.com/server">
<link rel="openid.delegate" href="http://emeyer.myopenid.com/">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link rel="shortcut icon" href="/favicon.ico"><link rel="home" href="http://meyerweb.com/" title="Home" ><link rel="stylesheet" href="http://meyerweb.com/ui/meyerweb.css" type="text/css" media="screen, projection"><link rel="stylesheet" href="http://meyerweb.com/ui/theme.css" type="text/css" media="screen, projection" id="themeLink"><link rel="stylesheet" href="http://meyerweb.com/ui/print.css" type="text/css" media="print"><script src="http://meyerweb.com/ui/addresses.js" type="text/javascript"></script><link rel="stylesheet" href="/ui/wordpress.css" type="text/css" media="screen">
<link rel="stylesheet" href="/ui/tfe.css" type="text/css" media="screen">
<link rel="stylesheet" href="/ui/home.css" type="text/css" media="screen">
<link rel="alternate" type="application/rss+xml" title="Thoughts From Eric" href="/eric/thoughts/rss2/full" />
<link rel="alternate" type="application/rss+xml" title="Thoughts From Eric (only technical posts)" href="/eric/thoughts/category/tech/rss2/full" />
<link rel="alternate" type="application/rss+xml" title="Thoughts From Eric (only personal posts)" href="/eric/thoughts/category/personal/rss2/full" />
<link rel="alternate" type="application/rss+xml" title="Distractions" href="/eric/thoughts/recent-links/rss2" />
<link rel="alternate" type="application/rss+xml" title="Excuse of the Day" href="/feeds/excuse/rss20.xml" />
</head>
<body id="www-meyerweb-com" class="hpg">

<div id="sitemast"><h1><a href="/"><span>meyerweb</span>.com</a></h1></div><div id="search"><h4>Exploration</h4><!-- SiteSearch Google --><form method="get" action="http://www.google.com/custom" target="_top"><div><input type="hidden" name="domains" value="meyerweb.com"></input><label for="sbb" style="display: none">Submit search form</label><input type="submit" name="sa" value="Google Search" id="sbb"></input><label for="sbi" style="display: none">Enter your search terms</label><input type="text" name="q" size="31" maxlength="255" value="" id="sbi"></input><p><input type="radio" name="sitesearch" value="meyerweb.com" checked id="ss1"></input><label for="ss1" title="Search meyerweb.com">meyerweb.com</label><input type="radio" name="sitesearch" value="" id="ss0"></input><label for="ss0" title="Search the Web">Web</label></p><input type="hidden" name="client" value="pub-3772084027748653"></input><input type="hidden" name="forid" value="1"></input><input type="hidden" name="ie" value="ISO-8859-1"></input><input type="hidden" name="oe" value="ISO-8859-1"></input><input type="hidden" name="safe" value="active"></input><input type="hidden" name="cof" value="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1"></input><input type="hidden" name="hl" value="en"></input></div></form><!-- SiteSearch Google --><!-- <form method="get" action="http://www.google.com/custom"><div><input type="submit" name="sa" value="Search"><input type="text" name="q" size="20" maxlength="255" value=""><input type="hidden" name="sitesearch" value="meyerweb.com"></div></form><small><a href="http://www.google.com/search">Powered by Google</a></small> --></div><div id="main"><div class="skipper">Skip to: <a href="#extra">site navigation/presentation</a></div><div class="skipper">Skip to: <a href="#thoughts">Thoughts From Eric</a></div>
<div id="thoughts">


<div class="entry">
<h3><a href="http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/" rel="bookmark" title="Permanent Link: WP-Gatekeeper">WP-Gatekeeper</a></h3>
<ul class="meta">
<li class="date">Mon 24 Jan 2005</li>
<li class="time">1411</li>
<li class="cat"><a href="http://meyerweb.com/eric/thoughts/category/tech/tools/" title="View all posts in Tools" rel="category tag">Tools</a><br> <a href="http://meyerweb.com/eric/thoughts/category/tech/wordpress/" title="View all posts in WordPress" rel="category tag">WordPress</a></li>
<li class="cmt"><a href="http://meyerweb.com/eric/thoughts/2005/01/24/wp-gatekeeper/#comments">67 responses</a></li>
<li></li><li></li></ul>

<div class="text">
<p>
In my <a href="/eric/thoughts/2005/01/21/more-spam-to-follow/" title="More Spam To Follow">post on <code>rel="nofollow"</code></a>, I mentioned the use of easily human-comprehensible challenge questions like &#8220;What is Eric&#8217;s first name?&#8221; as a way to defeat spambots.  There were two points made in the comments that I had considered but hadn&#8217;t brought up, given that they were tangential to the point of the post.  They were:
</p>

<ol>
<li>Spammers could set up a database of questions and answers used on sites.  They might or might not share it with each other, but the point is that if I set up &#8220;What is Eric&#8217;s first name?&#8221; as the sole challenge, the human running the spambot could build the ability to answer the question into the spambot, thus defeating it.  Quite true.</li>
<li>In order to make it more difficult to do this, there could be a set of challenges from which one is picked randomly.  So I might have three challenges asking for the first names of myself, Kat, and Carolyn.  Every time a comment form is delivered to a browser, one of the three challenges, picked at random, is included.  This would make it more difficult for a human spammer, since he (or she) would have to find all of the challenge questions. work out the responses, and build them all into a database, keyed to each site&#8217;s domain.</li>
</ol>

<p>
So over the weekend, I built as a proof of concept (and also as an exercise in learning more about how PHP, mySQL, and WordPress work) a <a href="http://wordpress.org/">WordPress</a> package to do what described in the second point above.  It&#8217;s called <a href="/eric/tools/wordpress/wp-gatekeeper.html">WP-Gatekeeper</a>, available from my <a href="/eric/tools/wordpress/">WordPress Tools</a> page, and if you&#8217;re brave you can give it a try.  Why brave?  Because the installation involves hacking a few WP files and adding a new entry to the admin menu, not to mention firing up a plugin.  And if you do it in the wrong order, you can break commenting for a short period.  There are DIY installation instructions on the WP-Gatekeeper page, for those who still want to proceed.  You also need to be brave because if you install it, you&#8217;re running code written&mdash;well, actually, adapted&mdash;by someone with only beginner-to-intermediate PHP skills.  I&#8217;ve been testing it locally and everything seems fine, but this is even more &#8220;use at your own risk&#8221; software than usual.  Got it?  Good.
</p>
<p>
Accordingly, WP-Gatekeeper is currently considered beta software.  I&#8217;m making it available now in the hopes that people more experienced than I with PHP and WordPress can take a look, hack on the code, and make it more efficient and the whole package easier to install.  I&#8217;m already aware that in WP 1.5, adding the admin page is much easier and doesn&#8217;t require hacking files, but I wrote WP-Gatekeeper in 1.2 and want it to work there, since that&#8217;s the latest public version.  Thus, any optimizations should work in 1.2.  When 1.5 (or whatever the next version number is) comes out, <em>then</em> I&#8217;ll worry about it.
</p>
<p>
Of course, there&#8217;s still nothing that prevents a spammer from registering questions and answers into a database, but the admin page makes it easy for a blogger to add, remove, modify, and re-key the challenges.  That will make tracking them more difficult, so long as a blogger puts effort into maintaining the list of challenges.  It gets back, in the end, to maintaining your blog.  The more maintenance you put into something, the better its shape will stay.
</p>
<p>
I&#8217;m also interested in suggestions for how the overall system could be made harder to bypass with a bot, and easier for a WP admin to run.  One feature I plan to add before going final is the ability to have the keys replaced on a regular basis, with the interval (daily/weekly/monthly/etc.) set by the admin.  The  other driving consideration here is that the system should be fully capable of working even if JavaScript is disabled.  It&#8217;s an accessibility thing; just go with me on this.  <ins datetime="2005-001-24T14:45:00-0500">(Accessibility is the main reason I did this rather than install an image CAPTCHA solution, as it happens.)</ins>
</p>
<p>
Got feedback?  Let&#8217;s hear it.
</p></div>

</div>

</div>
<p style="font-size: 90%; text-align: right; margin-top: 0.5em; padding-top: 0;">(If you care, there's even an <a href="/eric/thoughts/page/2/">archive of previous thoughts</a>...)</p>

</div><div id="extra"><div class="panel" id="archipelago"><h4>Identity Archipelago</h4><ul><li><a href="http://flickr.com/photos/meyerweb/" rel="me">Flickr</a></li><li><a href="http://twitter.com/meyerweb/" rel="me">Twitter</a></li><li><a href="http://dopplr.com/traveller/meyerweb">Dopplr</a></li><li><a href="http://www.linkedin.com/in/meyerweb" rel="me">LinkedIn</a></li><li><a href="http://technorati.com/profile/emeyer" rel="me">Technorati</a></li></ul></div><div class="panel" id="pointers"><h4>Projects Elsewhere</h4><ul><li><a href="http://aneventapart.com/">An Event Apart</a></li><li><a href="http://complexspiral.com/">Complex Spiral Consulting</a></li><li><a href="http://www.webassist.com/go/css/emeyer/">CSS Sculptor</a></li><li><a href="http://css-discuss.org/">css-discuss</a></li><li><a href="http://microformats.org/">Microformats</a></li><li><a href="http://s5project.org/">S5</a></li></ul></div><div class="panel" id="tour"><ul><li><a href="http://fray.com/issue3/"><img src="http://fray.com/images/i3c.gif" alt="Fray Contributor (Issue 3: Sex &amp; Death)" /></a></li><!-- <li><a href="http://www.webassist.com/go/css/emeyer/"><img src="/pix/CS_ad_180x109.jpg" alt="CSS Sculptor for Dreamweaver" style="max-width: 100%;" /></a></li> --></ul></div><div class="panel">
<h4>Recently Tweeted</h4>
<p class="more"><a href="http://twitter.com/meyerweb">see more</a></p>
<p>Saw a temporary license plate with expiration date MAR3010 and thought of <a href="http://twitter.com/t">@t</a>. <small>&#8211;tweeted 11 hours, 58 minutes ago</small></p>
</div><div id="sideblog" class="panel">
<h4>Distractions</h4>
<p class="more">
<a href="/eric/thoughts/recent-links/">archive</a>
</p>
<ul>
<li><a href="http://tweetagewasteland.com/2010/03/my-head-is-in-the-cloud/" title="March 18 | &#8220;I sense that my addiction to the realtime stream is only making room for the consumption of a faster stream.&#8221;">My Head is in the Cloud</a> <small>[via <a href="http://daringfireball.net/">John</a>]</small></li>
<li><a href="http://8bitnyc.com/" title="March 17 | All of a sudden I want to establish a mission in Central Park and negotiate with the natives for gold and food.">8-Bit NYC</a></li>
<li><a href="http://www.youtube.com/watch?v=nFicqklGuB0&amp;feature=player_embedded" title="March 12 | Wry comment expressing my appreciation of the creative derivativeness of this video and its uncanny accuracy in mocking common tropes.">Academy Award Winning Movie Trailer</a></li>
<li><a href="http://www.youtube.com/watch?v=414TmP12WAU" title="March 9 | &#8220;Apple juice&#8230; for half price!&#8221;  More like twice PRICELESS.  (Note: If you&#8217;re at work, don your headphones.)">Happy in Paraguay</a> <small>[via <a href="http://unstoppablerobotninja.com/">Ethan</a>]</small></li>
<li><a href="http://www.youtube.com/watch?v=9V5ubAOeOBk&amp;feature=player_embedded" title="February 10 | This is approximately the best thing ever.">U900 -Walk Don&#8217;t Run (Isogabamaware)</a></li>
<li><a href="http://www.456bereastreet.com/archive/201002/sifr_default_css_hides_content_from_at_least_one_screen_reader/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A 456bereastreet %28456 Berea Street%29" title="February 8 | -9999px comes through again, but I really wish we were beyond that kind of thing.">sIFR default CSS hides content from at least one screen reader</a></li>
<li><a href="http://www.macosxhints.com/article.php?story=20100117064356428" title="February 8 | Storing this for future use.">Take a picture with the iSight camera when a folder is opened</a></li>
<li><a href="http://mingle2.com/blog/view/web-developer-mind" title="February 4 | Mostly valid.  (SEE WHAT I DID THERE?)">The Mind of a Web Developer: An Illustrated Diagram</a></li>
<li><a href="http://www.theonion.com/content/news/science_channel_refuses_to_dumb" title="January 28 | &#8220;Punkin Chunkin, for Christ&#8217;s sake&#8230; What more do you people want?&#8221;">Science Channel Refuses To Dumb Down Science Any Further</a></li>
<li><a href="http://www.mailchimp.com/blog/project-omnivore-declassified/" title="January 27 | Sounds like quite a feat.  But I wonder how we&#8217;d feel if Microsoft or Google announced the same kind of thing on their e-mail services.">MailChimp&#8217;s Project Omnivore: Declassified</a></li>
<li><a href="http://www.politifact.com/truth-o-meter/statements/2010/jan/25/carolyn-maloney/congresswoman-says-democratic-presidents-create-mo/" title="January 26 | &#8220;Obviously, luck matters a lot, but when there is a consistent pattern over more than 60 years, it starts to look like more than just luck.&#8221;">Congresswoman says Democratic presidents create more private-sector jobs</a></li>
<li><a href="http://www.ted.com/talks/taylor_mali_what_teachers_make.html" title="January 25 | Truth.">Taylor Mali: What teachers make</a></li>
<li><a href="http://notebook.johnmartz.com/how-websites-work?c=1" title="January 22 | At last, the truth is out and I can stop pretending:  beatific monkeys are what makes it all go.">How websites work</a></li>
</ul>
</div>
<div class="panel" id="advisory">
<div class="guarded">
<a href="http://blogadvisorysystem.com/"><img src="/pix/bas/guarded.png" alt="Blog Advisory System Alert Level: Guarded"></a>
</div>
</div>

<div class="panel" id="excuse">
<h4>The <a href="/feeds/excuse/">excuse of the day</a> is</h4>
<p>Internet 1 traffic is being routed onto Internet 2</p>
</div>

<div class="panel" id="extras">
<h4>Extras</h4>
<ul>
<li><a href="/feeds/">Feeds</a> &#8226;</li>
<li><a href="/eric/faq.html">FAQ</a> &#8226;</li>
<li><a href="/family.html">Family</a></li>
</ul>
</div>

</div>

<div id="navigate">
<h4>Navigation</h4>
<ul id="navlinks">
<li id="archLink"><a href="/eric/thoughts/">Archives</a></li>
<li id="cssLink"><a href="/eric/css/">CSS</a></li>
<li id="toolsLink"><a href="/eric/tools/">Toolbox</a></li>
<li id="writeLink"><a href="/eric/writing.html">Writing</a></li>
<li id="speakLink"><a href="/eric/talks/">Speaking</a></li>
<li id="otherLink"><a href="/other/">Leftovers</a></li>
<li id="aboutsite"><a href="/ui/about.html">About this site</a></li>
</ul>
</div>

<div id="footer">
<p class="sosumi">All contents of this site, unless otherwise noted, are &copy;1995-2008 <strong>Eric A. and Kathryn S. Meyer</strong>.  All Rights Reserved.</p>
<p>"<a href="/eric/thoughts/">Thoughts From Eric</a>" is powered by the &uuml;bercool <a href="http://wordpress.org/">WordPress</a></p>
</div>
</body>
</html>
