我知道我要问的问题有数百个例子。但是他们中没有一个像我想要的那样为我工作。
所以,我有一个textarea,人们可以在其中添加评论/评论。但评论框不断发送垃圾邮件。
我想正则表达式可能是阻止垃圾邮件发送者的最有效方法,但我对Regex感到厌恶。
还有其他方法可以阻止垃圾邮件吗?
编辑:垃圾邮件发送者不断发布类似内容:
Brianna 寻找工作Lolita Pics如果她在镜子前他妈的会更好! 看到自己变得更加性感f#@ $。 只是让角质思考它 Preteens Nn Models omg if that that
(破坏,轻微审查,以避免在工作中造成人们的问题)
所以我想阻止字符串
中的每个超链接答案 0 :(得分:1)
有许多不同的方法可以摆脱垃圾邮件:
答案 1 :(得分:1)
在您的文字区域下方添加一个问题,例如;
“一周有多少天?”
然后添加另一个文本框,并将其与之比较;
7或7等。
如果测试失败,则拒绝该条目......
您可能需要随时更改问题,甚至列出不同的问题,但这是一种简单易行的实施方法。
答案 2 :(得分:1)
这里的答案很好,但有时愚蠢的机器人是一个很好的第一步。
绝大多数机器人只是阅读源代码并填写他们可以找到垃圾的所有输入字段,发送请求,然后希望它有效。它们非常愚蠢,所以像这样的东西可能会欺骗大多数机器人:
<p style="display:none">Screen readers: Use the next textarea (the first is used to confuse spam bots).</p>
<textarea name="comment" style="display:none"></textarea>
<textarea name="real_comment"></textarea>
然后在你的剧本中:
if (isset($_POST['comment']) && strlen($_POST['comment']) > 0) {
die('Bots begone!');
}
$comment = $_POST['real_comment'];
换句话说,在HTML中放置一个虚拟textarea
,使用CSS隐藏它,然后等待机器人填充它。
答案 3 :(得分:0)
执行所需操作的最简单方法是搜索字符串http://
以下if语句最多允许$text
if (substr_count($text,"http://") > 3)
但这并不是一个足够的检查,因为有很多垃圾邮件,根本不包含任何链接 - 只是rubish。
所以你需要做的第二件事就是一个带有“坏词”的黑名单
$lower = strtolower($text);
foreach ($blockword as $word) {
if (strpos($lower, strtolower($word))>0) {
//handle spam here..
}
}
毕竟,你必须保持一个不断增长的单词列表,但仍然需要删除大量的垃圾邮件..
所以你可以选择添加一个带有随机值的不可见字段,这些字段存储在会话中并检查这个值是否被正确提交
$_SESSION["random_secret"] = //create random string..
以后检查
if ($_POST["secret"] == $_SESSION["random_secret"])
通过此检查,您可以摆脱大量自动垃圾邮件(但仍然不是全部)
所以你最终得到了验证码