我正在为我的通讯表格订阅打击未来的机器人spamers。 我希望保持表单简单,使程序快速,所以我不使用验证码,而是使用隐藏的形式来捕获机器人。
它是否有效或机器人知道如何识别隐藏的形式并绕过它?
答案 0 :(得分:12)
至少目前,机器人还在努力阅读CSS或JavaScript。
您可以通过以下方式防止机密垃圾邮件无法使用验证码:
<form method="post" action="send.php">
<ol>
<li>
<label for="name">Name</label>
<input type="text" name="name" value="">
</li>
<li>
<label for="email">Email</label>
<input type="text" name="email">
</li>
<!-- We hide this with CSS,that's why it has an ID. -->
<li id="user">
<label for="username">Username</label>
<input type="text" name="username">
</li>
<!-- //end -->
<li>
<input type="submit" name="submit" value="Send It!">
</li>
</ol>
</form>
如您所见,将隐藏用户名字段。机器人无法识别这一点。 在此之后您需要做的只是验证后端代码中此字段为空。
<?php
if( !isset($_POST['name'])) { die("No Direct Access"); } // Make sure the form has actually been submitted
$name = $_POST['name'];
$email = $_POST['email'];
$spam = $_POST['username']; // Bot trap
if($spam) { // If the hidden field is not empty, it's a bot
die("No spamming allowed bitch!");
} else {
// Process the form like normal
}
可以更轻松地完成上述过程
此外,您还可以查看这些文章,以便更好地全面了解该主题。
Green-beast和web design但您也可以在网上找到这样的数十篇文章
答案 1 :(得分:1)
一种有效的方法是让表单提交依赖于JavaScript。机器人通常不支持JavaScript。虽然这不是一个完美的解决方案..
答案 2 :(得分:0)
一个老问题,但在这里分享了我的经验,这是我最近实现的。
创建一些使用CSS类进行隐藏的输入元素。
//Element to detect spam
<input
type="text"
name="email"
class="hide_me"
id="email"
/>
//Real element
<input
type="text"
name="customer_email"
id="customer_email"
placeholder="Your Email"
/>
// CSS style to hide the element
.hide_me{
opacity: 0;
position: absolute;
top: 0;
left: 0;
height: 0;
width: 0;
z-index: -1;
}
使用javascript检查电子邮件字段是否已填写。如果已填写,则说明该人不是真实的人,因此不应提交表单。