我正在尝试提出一个足够好的反垃圾邮件机制来防止自动生成的输入.我读过像captcha,1 + 1 =等技术?东西工作得很好,但他们也提出了一个额外的步骤阻碍了应用程序的免费快速使用(我不是在寻找类似的东西).
我已经尝试在我的所有表单中设置一些隐藏字段,display: none;
但是,我确定可以将脚本配置为跟踪表单字段ID并且根本不填充它.
您是否实施/了解了一种良好的防自动填充机器人方法?有没有什么可以与HTML和/或服务器端处理无缝地完成,并且(几乎)防弹?(没有JS就可以简单地禁用它).
我试图不依赖会话(即计算点击按钮的次数以防止过载).
我实际上发现一个简单的Honey Pot领域效果很好.大多数机器人填写他们看到的每个表单字段,希望绕过所需的字段验证器.
http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx
如果您创建一个文本框,把它藏在JavaScript,然后验证值是空白的服务器上,这会淘汰机器人的99%在那里,并不会引起用户的99%,任何挫折都没有.剩下1%的javascript已禁用仍会看到文本框,但您可以为这些情况添加"将此字段留空"等消息(如果您完全关心它们).
(另外,如果你在场上做了style ="display:none",那么对于机器人来说太容易看到并放弃该字段,这就是我更喜欢javascript方法的原因).
一种易于实现但不是万无一失的(特别是"特定"攻击)解决反垃圾邮件的方法是跟踪表单提交和页面加载之间的时间.
机器人请求页面,解析页面并提交表单.这很快.
人类输入URL,加载页面,在页面完全加载前等待,向下滚动,阅读内容,决定评论/填写表格,需要时间填写表格,然后提交.
时间上的差异可能很微妙; 如何在没有cookie的情况下跟踪这个时间需要某种方式的服务器端数据库.这可能会对性能产生影响.
您还需要调整阈值时间.
如果 - Bot根本找不到任何东西form
怎么办?
3个例子:
1.使用AJAX插入表单如果您对使用JS已禁用但无法查看/提交表单的用户感到满意...您可以随时通知他们.比,
创建一个 在你需要调用该表单的页面内部使用一个空的
我所做的是使用隐藏字段并在其上放置时间戳,然后使用PHP将其与服务器上的时间戳进行比较. 如果它超过15秒(取决于您的表格有多大或多小),那就是机器人. 希望这有帮助 实际上消除垃圾邮件的一种非常有效的方法是使文本字段中包含文本,例如"删除此文本以提交表单!" 并且必须删除该文本才能提交表单. 在表单验证后,如果文本字段包含原始文本或任何随机文本,请不要提交表单.机器人可以阅读表单名称并自动填写姓名和电子邮件字段,但不知道他们是否必须从某个字段中删除文本才能提交. 我在公司网站上实施了这种方法,它完全消除了我们每天收到的垃圾邮件.真的行! 如何创建一个文本字段输入框与背景相同的颜色,必须保持空白.这将解决机器人阅读显示的问题:无 reCAPTCHA是一种免费的抗菌服务,可以帮助数字化书籍 它已被谷歌(2009年)收购:
https://www.google.com/recaptcha https://developers.google.com/recaptcha/
另见
https://en.wikipedia.org/wiki/ReCAPTCHA https://en.wikipedia.org/wiki/CAPTCHA获取更多一般信息 其中许多垃圾邮件机器人只是服务器端脚本,它们会使网络徘徊.您可以通过使用一些javascript在发送之前操纵表单请求来对抗其中的许多(即,根据某个客户端变量设置其他字段).这不是一个完整的解决方案,并且可能导致许多问题(例如,用户没有javascript,在移动设备上等),但它可能是您的攻击计划的一部分. 这是一个微不足道的例子...... 你的PHP脚本中的某个地方...... 此外,验证码很棒,而且真的是防范垃圾邮件的最佳方法.form.html
并放置form
一个和这个jQuery:
$("#dynamicForm").load("form.html #formContainer");
2.完全使用JS构建表单
// THE FORM
var $form = $("", {
appendTo : $("#formContainer"),
class : "myForm",
submit : AJAXSubmitForm
});
// EMAIL INPUT
$("",{
name : "Email", // Needed for serialization
placeholder : "Your Email",
appendTo : $form,
on : { // Yes, the jQuery's on() Method
input : function() {
console.log( this.value );
}
}
});
// MESSAGE TEXTAREA
$("",{
name : "Message", // Needed for serialization
placeholder : "Your message",
appendTo : $form
});
// SUBMIT BUTTON
$("",{
type : "submit",
value : "Send",
name : "submit",
appendTo : $form
});
function AJAXSubmitForm(event) {
event.preventDefault(); // Prevent Default Form Submission
// do AJAX instead:
var serializedData = $(this).serialize();
alert( serializedData );
$.ajax({
url: '/mail.php',
type: "POST",
data: serializedData,
success: function (data) {
// log the data sent back from PHP
console.log( data );
}
});
}
.myForm input,
.myForm textarea{
font: 14px/1 sans-serif;
box-sizing: border-box;
display:block;
width:100%;
padding: 8px;
margin-bottom:12px;
}
.myForm textarea{
resize: vertical;
min-height: 120px;
}
4> 小智..:
5> 小智..:
这也将捕获那些无法遵循指示的用户,这可能是不可取的.
6> 小智..:
我是一个盲目的用户,我发现了一个像这样的表单字段,上面的标签上写着:"如果你能看到这个,请留空." 非常有效的IMO.
这提出了可访问性问题.使用屏幕阅读器的用户不会隐藏蜜罐索引.
当你获得更多声誉而不是答案时,请添加此作为评论;)
7> Anantha Kuma..:http://recaptcha.net/
作为一个用户,我发现recaptcha很难经常弄清楚.有些单词很难阅读,最终你不得不尝试3到4次.虽然这肯定会有助于机器人问题.
8> John Himmelm..:
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有