【问题标题】:Form: Honeypot spam issue形式:蜜罐垃圾邮件问题
【发布时间】:2017-09-13 00:13:55
【问题描述】:

我想使用蜜罐而不是 recaptcha 来处理垃圾邮件。我正在运行 WordPress。通常,我会为此使用 Gravity 表单,但是,我没有开发此站点,他们使用碳字段来填充表单字段。

我在下面的 js 中需要一个条件,即 if $robotest !="" echo "this is spam" 否则提交表单。我的蜜罐表单字段是robotest (var $robotest = $this.find(['[name="robotest"]']);)。

这是提交表单的全部代码:

$('.form-suite form').on('submit', function(e) {
  e.preventDefault();

  var is_valid = true;
  var data_to_send = {};

  var $this = $(this);

  console.log('FORM SUBMITTED!!!!');

  console.log('ap test');

  console.log($('#event_dates').val());

  console.log(grecaptcha);



  var $team_artist_event = $this.find('[name="team-artist-event"]');
  var $booking_event = $this.find('[name="game"]');
  var $first_name = $this.find('[name="fname"]');
  var $last_name = $this.find('[name="lname"]');
  var $company = $this.find('[name="company"]');
  var $email = $this.find('[name="email"]');
  var $phone = $this.find('[name="phone"]');
  var $contact_method = $this.find('[name="contact-method"]');
  var $comments = $this.find('[name="comments"]');
  var $sell_suite = $this.find(['[name="sell_suite"]']);
  var $corporate_outings = $this.find(['[name="corporate_outings"]']);
  var $event_dates = $this.find(['[name="event_dates"]']);
  var $how_many = $this.find(['[name="how_many"]']);
  var $robotest = $this.find(['[name="robotest"]']);

  console.log('AARON HI dates:' + $event_dates.val());


  $this.find('.required').each(function() {
    $(this).attr('style', 'background-color:  #ddd;');

    var field_value = $(this).val();
    if (field_value == '') {
      $(this).attr('style', 'background-color: rgba(255, 40, 40, 0.25) !important;');
      is_valid = false;
    }
  });

  //var captcha = grecaptcha.getResponse();
  //if (captcha == '') {
  //is_valid = false;
  //$('.captcha').attr('style', 'background-color: rgba(255, 40, 40, 0.25) //!important;');
  //}
  var email_regex = /[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
  if (!email_regex.test($email.val())) {
    $email.attr('style', 'background-color: rgba(255, 40, 40, 0.25) !important;');
    is_valid = false;
  }

  if (is_valid) {
    data_to_send.team_artist_event = $team_artist_event.val();
    data_to_send.booking_event = $booking_event.val();
    data_to_send.first_name = $first_name.val();
    data_to_send.last_name = $last_name.val();
    data_to_send.company = $company.val();
    data_to_send.email = $email.val();
    data_to_send.phone = $phone.val();
    data_to_send.contact_method = $contact_method.val();
    data_to_send.comments = $comments.val();
    data_to_send.sell_suite = $sell_suite.val();
    data_to_send.corporate_outings = $corporate_outings.val();
    data_to_send.action = 'booking_form';
    data_to_send.event_dates = $('#event_dates').val();
    data_to_send.how_many = $('#how_many').val();

    $.ajax({
      url: ajax_object.ajax_url,
      data: data_to_send,
      method: 'POST',
      dataType: 'json',
      success: function(data) {


        if (data.status == 'OK') {

          console.log('GA send');
          ga('send', {
            'hitType': 'pageview',
            'page': '/form-submit/team' // Virtual page (aka, does not actually exist) that you can now track in GA Goals as a destination page.
          });

          ga('send', 'event', 'Forms', 'submitted', 'Team Form');

          window.location.href = '/thank-you.php';

          //$('.personal-info, .event-info').hide();
          //$(' .event-info').before('<h2 class="form-success-msg">' + data.message + '</h2>');
        }




      },
    });
  }

});

【问题讨论】:

  • 除了您要问的...您的email_regex 过于严格,将排除许多许多 有效的电子邮件地址,包括来自较新(较长)TLD 的所有内容像 .museum 以及 @ 左侧的 [a-z0-9._%+-]+ 之外的许多合法字符 -- 参见 How to Find or Validate an Email Address
  • 感谢您指出这一点。蜜罐问题有什么想法吗?
  • 所以如果我已经清楚了,$robotest 应该始终为空,除非机器人找到并填写它。然后对非空的测试意味着 is_valid 应该是错误的,并且可以在您将验证码测试注释掉的地方进行该测试...if ($robotest.val().length &gt; 0) { is_valid = false; }

标签: javascript wordpress forms


【解决方案1】:

如果有人填写表单,蜜罐字段&lt;input name="robotest"&gt; 应始终为空,因为该字段对人隐藏。盲目填写表格的机器人会(可能)找到该字段并在其中输入一些值。

您的示例已将您的验证码注释掉...

//var captcha = grecaptcha.getResponse();
//if (captcha == '') {
//is_valid = false;

您可以只测试蜜罐字段以确保它为空。

if ($robotest.val().length > 0) {
    is_valid = false;
}

!is_valid 时,您可以继续并跳过其余的测试(提前返回),甚至直接返回:

if ($robotest.val().length > 0) {
    return;
}

如果您的调用者/处理程序设置为准备就绪。

【讨论】:

  • 这两个选项都不起作用。这是我正在使用的蜜罐字段js:
  • var $robotest = $this.find(['[name="robotest"]']); if ($robotest.val().length &gt; 0) { $robotest.attr('style', 'background-color: rgba(255, 40, 40, 0.25) !important;'); is_valid = false; }
  • functions.js 正在提交表单。在我添加上面的蜜罐代码之前完美运行。这是更相关的代码:
  • functions.js -var $robotest.... 的链接在第 215 行附近:[Form JS](view-source:luxuryvipsuites.com/wp-content/themes/…)。
  • 正在寻找解决方案。我不确定为什么蜜罐验证不起作用。这是 functions.js 的链接:[luxuryvipsuites.com/wp-content/themes/…robotest 验证从第 215 行开始
猜你喜欢
  • 2011-07-14
  • 2011-04-07
  • 2016-07-13
  • 2020-02-03
  • 2014-12-14
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
相关资源
最近更新 更多