php-无需使用验证码即可阻止评论垃圾邮件
有哪些非验证码方法可以阻止我的评论中的垃圾邮件?
ian asked 2020-01-24T13:14:29Z
18个解决方案
61 votes
以我的经验,当前最有效的方法是通过CSS使用户看不见的蜜罐输入字段(最好使用几种不同的方法,例如可视性:隐藏,设置为0像素的大小以及绝对定位在浏览器窗口之外); 如果它们仍然被占用,您可以认为它是垃圾邮件机器人。
该博客描述了一种我自己尝试过的相当复杂的方法(到目前为止,成功率100%),但是我怀疑通过跳过带有哈希字段名称的所有内容并仅添加一些简单的蜜罐字段,您可以获得相同的结果。
Michael Borgwardt answered 2020-01-24T13:14:45Z
14 votes
1)在表单中添加与会话相关的信息示例:
然后在回发时,检查会话是否有效。
2)仅Javascript。 在提交时使用Javascript注入。 例:
3)每个IP,用户或会话的时间限制。 这很简单。
4)随机化字段名称:
$fieldkey = dechex(crc32(mt_rand().dechex(crc32(time()))));
$_SESSION['fieldkey'] = $fieldkey;
?>
然后,您可以在服务器端对其进行检查。
mauris answered 2020-01-24T13:15:27Z
9 votes
Akismet有一个API。 有人为此编写了一个包装器类(BSD许可证),网址为:[http://cesars.users.phpclasses.org/browse/package/4401.html]
还有一个贝叶斯过滤器类(还有BSD Liscense)[http://cesars.users.phpclasses.org/browse/package/4236.html]
easement answered 2020-01-24T13:15:52Z
6 votes
这是在不使用验证码的情况下阻止垃圾邮件机器人或蛮力攻击的简单技巧。
将其放在您的表单中:
把它放在你的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。
StoneHeart answered 2020-01-24T13:16:25Z
5 votes
也有蜜罐理论。 我喜欢将蜜罐与其他减少垃圾邮件的方式结合使用,以获得最佳效果。
[http://www.projecthoneypot.org/]
reactivePixel answered 2020-01-24T13:16:49Z
4 votes
朴素贝叶斯滤波器,当然:
[http://blog.liip.ch/archive/2005/03/30/php-naive-bayesian-filter.html]
ChickenMilkBomb answered 2020-01-24T13:17:13Z
3 votes
另一个常见的方法是给用户一个简单的问题(“火是冷还是热?”“ 2加7是什么?”等)。 它有点像验证码,但是视力障碍的用户可以使用屏幕阅读器来访问它。 我认为必须有一个执行此操作的WordPress插件,因为我在WordPress博客上经常看到它。
Kip answered 2020-01-24T13:17:34Z
2 votes
正如许多人已经提出的那样:使用一个蜜罐输入字段。 但是您还需要做另外两件事。首先,随机分配哪个输入字段是蜜罐的名称/ id。 存储会话中有用字段的状态(以及用于CSRF攻击的表单令牌)。 例如,您需要获取以下字段:名称,电子邮件,消息。 以您的形式,您将拥有“ token”是您的令牌,“ jzefkl46”是此表单的名称,“ ofdizhae”表示电子邮件,“ 45sd4s2”表示消息,“ fgdfg5qsd4”表示蜜罐。在用户会话中,您可以看到类似
array("forms" => array("your-token-value" => array("jzefkl46" => "name",
"ofdizhae" => "email",
"45sd4s2" => "message",
"fgdfg5qsd4" => honey"));
您只需要在获取表单数据时将其重新关联即可。
第二件事,由于机器人有很多机会避开您的蜜罐领域(25%的机会),因此请增加罐的数量。 使用其中的10或20个,您会增加机器人的难度,而html中不会有太多的开销。
Arkh answered 2020-01-24T13:18:04Z
2 votes
斯布拉姆! 是类似于Akismet的开源过滤器。
它使用朴素贝叶斯过滤,检查发件人的IP和多个分布式黑名单中的链接,检查HTTP请求的正确性以及使用JS作为提示(但不是必需)。
Kornel answered 2020-01-24T13:18:29Z
2 votes
常规的验证码现在可解决垃圾邮件机器人。
相反,请考虑“文本验证码”:一个逻辑或常识性问题,例如“ 1 + 1是多少?” 或“吉斯塔德将军的白马是什么颜色?” 这个问题甚至可以是静态的(每次尝试都相同的问题)。
(Taken from http://matthewhutchinson.net/2010/4/21/actsastextcaptcha )
我认为Jeff Atwood甚至在他的博客上使用了这样的验证。 (如果我错了纠正我)
一些资源:
文字验证码网站和服务:[http://textcaptcha.com/demo]
插件:[http://matthewhutchinson.net/2010/4/21/actsastextcaptcha]
有关带有无效代码的文本验证码的更多信息:[http://www.thesamet.com/blog/2006/12/21/fighting-spam-on-phpbb-forums/]
rlb.usa answered 2020-01-24T13:19:20Z
1 votes
您可以尝试使用Akismet这样的第三方。 API密钥免费供个人使用。 另外,Zend框架为此提供了一个程序包。
Kieran Hall answered 2020-01-24T13:19:40Z
1 votes
大多数漫游器只需填写整个表格并将其发送给您。 一个有效的简单技巧是创建一个通常使用javascript隐藏的普通字段。 在服务器端,只需检查此字段是否已填写。 如果是这样-肯定是垃圾邮件。
clops answered 2020-01-24T13:20:01Z
1 votes
禁止链接。 没有链接,垃圾邮件是没有用的。
[编辑]作为一种中间方法,仅允许链接到“良好”的网站(通常是您自己的网站)。 其中只有少数几个,因此您可以根据用户的要求添加它们,也可以保留评论,直到您验证链接。 好的时候,添加它。
一段时间后,您可以关闭此功能并自动拒绝带有链接的评论,并等待用户投诉。
Aaron Digulla answered 2020-01-24T13:20:30Z
1 votes
我通过以下简单的数学问题减少了网站上约99%的垃圾邮件:
什么是2 + 4 [TextBox]
如果用户回答“ 6”,则将能够提交问题/评论。
为我工作,为Coding Horror的Jeff Atwood提供类似的解决方案!
azamsharp answered 2020-01-24T13:21:03Z
0 votes
在我的博客上,我有一种折衷的验证码:如果帖子包含链接,则仅使用验证码。 我还使用蜜罐输入字段。 到目前为止,这已经接近100%有效。 时不时会有垃圾邮件发送者向不包含链接的每种表单提交内容(通常是类似“不错的网站!”之类的内容)。 我只能假设这些人认为我会通过电子邮件向他们发送电子邮件以查明他们是谁(使用只有我看到的电子邮件地址)。
Kip answered 2020-01-24T13:21:24Z
0 votes
除了使用蜜罐字段,我们还可以自动禁止该IP(不适用于动态IP),尤其是由漫游器回传的任何链接。
Sanil answered 2020-01-24T13:21:44Z
0 votes
Akismet是一个不错的选择,他们可以检查您的帖子中是否包含垃圾邮件,并且工作效率很高。您只需要加载他们的书呆子。[http://akismet.com/development/]
answered 2020-01-24T13:22:04Z
0 votes
查看一些wp反垃圾邮件插件以获取示例和想法
有很多不用使用验证码的反垃圾邮件。
我建议一些:hashcash,nospamnx,Typepad反垃圾邮件。所有这些都使用不同的方法来阻止垃圾邮件,我全部使用它们。 hashcash + nospamnx几乎阻止了所有spambot。 而键盘防垃圾邮件可阻止大多数人类键入的垃圾邮件。
这些也很不错:spambam,wp-spamfree,反验证码,不良行为,httpbl等
还可以通过简单的.htaccess阻止任何不是来自您自己站点的bot直接POST(检查引荐来源)
或者,只需将您的评论系统外包给争论和沉睡。
DennyHalim.com answered 2020-01-24T13:22:47Z