在不使用验证码的情况下阻止垃圾评论

时间:2009-10-16 13:00:00

标签: php captcha spam

在我的评论中阻止垃圾邮件有哪些非验证码方法?

18 个答案:

答案 0 :(得分:59)

根据我的经验,目前最有效的方法是蜜罐输入字段,这些方法通过CSS对用户不可见(最好使用几种不同的方法,例如visibility:hidden,设置0像素的大小,和绝对定位远远超出浏览器窗口);如果他们无论如何都被填满了,你可以认为它是一个垃圾邮件。

This blog描述了一种我自己尝试过的相当复杂的方法(到目前为止已经取得了100%的成功),但我怀疑你可以通过使用散列字段名称跳过所有内容来获得相同的结果添加一些简单的蜜罐字段。

答案 1 :(得分:14)

1)将与会话相关的信息添加到表单中示例:

<input type="hidden" name="sh" value="<?php echo dechex(crc32(session_id())); ?>" />

然后在回发时,检查会话是否有效。

2)仅限Javascript 。在提交时使用Javascript注入。例如:

<input type="hidden" id="txtKey" name="key" value="" />
<input type="submit" value="Go" onclick="document.getElementById('txtKey').value = '<?php echo dechex(crc32(session_id())) ?>';" />

3)每个IP,用户或会话的时间限制。这很简单。

4)随机化字段名称:

<?php
   $fieldkey = dechex(crc32(mt_rand().dechex(crc32(time()))));
   $_SESSION['fieldkey'] = $fieldkey;
?>
<input type="text" name="name<?php echo $fieldkey; ?>" value="" />
<input type="text" name="address<?php echo $fieldkey; ?>" value="" />   

然后你可以在服务器端检查它。

答案 2 :(得分:8)

Akismet有一个API。有人在http://cesars.users.phpclasses.org/browse/package/4401.html

上写了一个包装类(BSD许可证)

还有贝叶斯过滤器类(BSD许可证) http://cesars.users.phpclasses.org/browse/package/4236.html

答案 3 :(得分:5)

这是在不使用验证码的情况下阻止垃圾邮件机器人或暴力攻击的简单技巧。

把它放在你的表格中:

<input type="hidden" name="hash" value="<?php echo md5($secret_key.time()).','.time(); ?>" />

把它放在你的PHP代码中

$human_typing_time = 5;/** page load (1s) + submit (1s) + typing time (3s) */
$vars = explode(',', $_POST['hash']);
if(md5($secret_key.$vars[1]) != $vars[0] || time() < $var[1] + $human_typing_time){
    //bot?
    exit();
} 

根据表格的重量,您可以增加或减少$ human_typing_time。

答案 4 :(得分:4)

答案 5 :(得分:4)

还有蜂蜜罐理论。我喜欢将蜜罐与其他形式的垃圾邮件减少相结合,以获得最佳效果。

http://www.projecthoneypot.org/

答案 6 :(得分:3)

另一个常见的方法是给用户一个简单的问题(“火热还是冷?”“什么是2加7?”等)。这是一个小验证码 - 喜欢,但使用屏幕阅读器的视力障碍用户更容易使用它。我认为必须有一个WordPress插件可以做到这一点,因为我经常在WordPress博客上看到它。

答案 7 :(得分:2)

很多人已经建议:使用蜜罐输入字段。但是还有两件事你需要做。 首先,随机化输入字段为蜜罐的名称/ ID。将有用字段的状态存储在会话中(以及用于CSRF攻击的表单标记)。例如,您可以获取以下字段:姓名,电子邮件,消息。在您的表格中,您将拥有 “令牌”是你的令牌,“jzefkl46”是这个表格的名称,“ofdizhae”用于电子邮件,“45sd4s2”用于消息,“fgdfg5qsd4”用于蜜罐。 在用户会话中,您可以使用

array("forms" => array("your-token-value" => array("jzefkl46" => "name",
                                                   "ofdizhae" => "email",
                                                   "45sd4s2" => "message",
                                                   "fgdfg5qsd4" => honey"));

您只需在获得表单数据时重新关联它。

第二件事,因为机器人有很多机会避免你的蜜罐场(25%的几率),所以增加盆的数量。使用10或20个,你的机器人增加了难度,而你的html没有太多的开销。

答案 8 :(得分:2)

Sblam!是一个类似于Akismet的开源过滤器。

它使用朴素贝叶斯过滤,检查发送者的IP和多个分布式黑名单中的链接,检查HTTP请求的正确性,并使用JS作为提示(但不是要求)。

答案 9 :(得分:2)

常规CAPTCHAs现在可以解决垃圾邮件问题。

改为考虑"text CAPTCHAs":逻辑或常识问题,例如“什么是1 + 1?”或者“一般蛋羹的白马是什么颜色的?”问题甚至可以是静态的(每次尝试都是同样的问题)。

Text Logic CAPTCHA

(Taken from http://matthewhutchinson.net/2010/4/21/actsastextcaptcha )

我认为Jeff Atwood甚至在他的博客上使用了这样的验证。 (如果我错了,请纠正我)

一些资源:

答案 10 :(得分:1)

大多数机器人只需填写整个表格并发送给您。一个简单的技巧是创建一个你通常借助javascript隐藏的普通字段。在服务器端,只需检查此字段是否已填写。如果是这样 - 那肯定是垃圾邮件。

答案 11 :(得分:1)

你可以尝试使用像Akismet这样的第三方。 API密钥可供个人免费使用。此外,Zend Framework还有package

答案 12 :(得分:1)

我通过以下简单的数学问题减少了我网站上99%的垃圾邮件:

什么是2 + 4 [TextBox]

如果用户回答“6”,他们将能够提交问题/评论。

适用于我和类似的解决方案适用于编码恐怖的杰夫阿特伍德!

答案 13 :(得分:1)

禁止链接。没有链接,垃圾邮件就没用了。

[编辑]作为中途,只允许链接到“好”的网站(通常是你自己的)。它们只有极少数,因此您可以根据用户的要求添加它们,也可以在验证链接之前保留注释。当它很好时,添加它。

过了一段时间,您可以将其关闭并自动拒绝带有链接的评论并等待用户投诉。

答案 14 :(得分:0)

在我的博客上,我有一种妥协验证码:如果帖子包含链接,我只使用验证码。我还使用蜜罐输入字段。到目前为止,这已经几乎 100%有效。每隔一段时间就会有一个垃圾邮件发送者向每个不包含链接的表单提交内容(通常类似于“不错的网站!”)。我只能假设这些人认为我会通过电子邮件发送给他们,以了解他们是谁(使用我看到的电子邮件地址)。

答案 15 :(得分:0)

与使用蜜罐字段一起,我们可以自动禁用IP(不适用于动态IP),特别是机器人发回的任何链接。

答案 16 :(得分:0)

Akismet是一个不错的选择,他们检查您的帖子是否有垃圾邮件,并且非常有效。 你只需要加载他们的librabry。 http://akismet.com/development/

答案 17 :(得分:0)

查看一些wp反垃圾邮件插件以获取示例和想法

没有使用验证码就有很多不错的反垃圾邮件。

我推荐一些:hashcash,nospamnx,typepad antispam。 所有这些使用阻止垃圾邮件的不同方法,我使用它们。 hashcash + nospamnx阻止几乎所有的spambot。和typepad反垃圾邮件阻止大多数人类垃圾邮件。

这些也很好:spambam,wp-spamfree,anti-captcha,bad-behavior,httpbl等

还有简单的.htaccess阻止任何来自你自己站点的机器人直接POST(检查referer)

或者,简单地将您的评论系统外包给disqus并安然入睡。