一直以来,Spam 被认为是所有blog和forum的公敌,很多网站为了防止Spam都加上了验证码来验证,但是这种方法我觉得很不好,自己网站防止不了的东西为什么要叫用户来承担呢?这几天在 Digg 上看到一则利用CSS来防止Spam的文章,感到蛮有趣的!而且据该作者自己说效果还是挺明显的,少了很多Spam,那接下来就来看看他的做法:
其实这种做法很简单,在最后一个加多个<input>, 将其宽度设个很小值,并且在样式中用visibility: hidden;隐藏掉就可以了!不懂?看代码~
html 代码:
- <div class="form-demo">
- <form id="form1" method="post" action="">
- <fieldset>
- <legend>Fighting Spam With CSS</legend>
- <p>
- <label for="author">昵称:</label><br />
- <input type="text" name="author" id="author" size="35" tabindex="1" />
- </p>
- <p>
- <label for="email">电子邮件:</label><br />
- <input type="text" name="email" id="email" size="35" tabindex="2" />
- </p>
- <p>
- <label for="url">个人网站:</label><br />
- <input type="text" name="url" id="url" size="35" tabindex="3" />
- </p>
- <p>
- <label for="comment">评论:</label><br />
- <textarea name="comment" id="comment" cols="60" rows="6" tabindex="4"></textarea>
- <textarea cols="1" rows="1" class="special"></textarea>
- </p>
- <p>
- <input name="submit" type="submit" id="submit" tabindex="5" value="提交表单" class="submit" />
- </p>
- </fieldset>
- </form>
- </div>
CSS 代码:
- .form-demo { margin: 20px auto 0; width: 400px;}
- fieldset { color: #fff; border: 0; border: 1px #fff solid; padding: 8px;}
- fieldset legend { font-size: 20px; font-weight: bold; margin-bottom: 15px; font-family: Arial; color: #fff;}
- fieldset p { margin-bottom: 15px;}
- fieldset p input, fieldset p textarea { border: 2px #ffa501 solid;}
- fieldset p textarea { padding: 2px 4px; overflow: auto; width: 300px; height: auto; line-height: 160%; font-size: 14px;}
- fieldset p input.submit { padding: 4px 4px 2px 4px;}
- /* Fighting Spam With CSS Start */
- .special { width: 5px; visibility: hidden;}
- /* Fighting Spam With CSS End */
Demo 地址: http://blog.ikshow.cn/demo/fighting_spam_with_css/
个人感觉这种方法可能有效,但是如果Spam Bot学聪明了,这种方法也就没用了,呵呵,不过作者的这种创意想法值得赞赏~

1楼的 iVane 说:
忘了说了,懒得重新编辑,直接在这里留言说了。
要使这个方法有效,必须用JS或者PHP判断隐藏的那个textarea,如果里面有被填入信息,那么可以直接判断为是Spam行为,可以终止表单的提交,如果改textarea没有被填入数据,那么就可以直接进行提交,嘿嘿,不错的防止Spam行为~
[07月 1st, 2007 at 12:25 pm]