Как кто-то может отправить это сообщение через? (Вопрос фильтрации электронной почты) - PullRequest
0 голосов
/ 04 декабря 2010

Я немного растерялся и становлюсь все более озабоченным.У меня есть электронная форма подписки на рассылку новостей, найденная на этом сайте: http://rattletree.com/

Обратите внимание, что если вы зайдете туда и попытаетесь нажать «Отправить», не введя хотя бы какое-либо значение, вы получите сообщение об ошибке.Кроме того, я не получаю письмо в этом случае.Единственный способ получить электронное письмо - это ввести какое-то значение.Но по какой-то причине мне иногда приходят письма с пустыми значениями.Это довольно прерывисто, и я предположил, что какой-то бот каким-то образом проходит через мои фильтры, но мне бы очень хотелось знать, как это происходит?

Вот код:

<div class="outeremailcontainer">

<div id="emailcontainer">
    <form action="index_success.php" method="post" id="sendEmail" class="email">
    <h3 class="register2">Newsletter Signup:</h3>
    <ul class="forms email">
     <li class="name"><label for="yourName">Name: </label>
 <input type="text" name="yourName" class="info" id="yourName" value="" /><br />
</li>

<li class="city"><label for="yourCity">City: </label>
 <input type="text" name="yourCity" class="info" id="yourCity" value="" /><br />
</li>

      <li class="email"><label for="emailFrom">Email: </label>
         <input type="text" name="emailFrom" class="info" id="emailFrom" value="" />
                   </li>

       <li class="buttons email">

         <button type="submit" id="submit">Send</button>
         <input type="hidden" name="submitted" id="submitted" value="true" />
       </li>

    </ul>
  </form>
<div class="clearing">

<script type="text/javascript">
$(document).ready(function(){

 $('#emailFrom')
  .focus(function(){
   if ($('#overlay').length) { return; } // don't keep adding overlays if one exists
   $('#sendEmail')

    .find('.name, .city').slideDown(300, function(){ $(this).show(); });
   $('.outeremailcontainer').css({ position: 'relative', bottom: 0, left: 0, zIndex : 1001 });
   $('<div id="overlay"></div>').appendTo('body');
  });

 $('#overlay').live('click', function(){
   $('#sendEmail')
    .css({ backgroundColor : 'transparent' })
    .find('.name, .city').slideUp(300);
   $('.outeremailcontainer').css({ position : 'static' });
   $('#overlay').remove();
  });

});
</script>

Вот подтверждение по электронной почте:

    $(document).ready(function(){

 $('#emailFrom')
  .focus(function(){
   if ($('#overlay').length) { return; } // don't keep adding overlays if one exists
   $('#sendEmail')

    .find('.name, .city').slideDown(300, function(){ $(this).show(); });
   $('.outeremailcontainer').css({ position: 'relative', bottom: 0, left: 0, zIndex : 1001 });
   $('<div id="overlay"></div>').appendTo('body');
  });

 $('#overlay').live('click', function(){
   $('#sendEmail')
    .css({ backgroundColor : 'transparent' })
    .find('.name, .city').slideUp(300);
   $('.outeremailcontainer').css({ position : 'static' });
   $('#overlay').remove();
  });

});

$(document).ready(function(){
  $("#submit").click(function(){
    $(".error").hide();
    var hasError = false;
    var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;


    var emailFromVal = $("#emailFrom").val();

    if(emailFromVal == '') {
      $("#emailFrom").after('<span class="error">You forgot to enter the email address to send from.</span>');
      hasError = true;

    } else if(!emailReg.test(emailFromVal)) {
      $("#emailFrom").after('<span class="error">Enter a valid email address to send from.</span>');
      hasError = true;
    }

    var yourNameVal = $("#yourName").val();
    if(yourNameVal == '') {
        $("#yourName").after('<span class="error">You forgot to enter your name.</span>');
        hasError = true;
    }

    var yourCityVal = $("#yourCity").val();
    if(yourCityVal == '') {
        $("#yourCity").after('<span class="error">You forgot to enter your city.</span>');
        hasError = true;
    }
    if(hasError == false) {
      $(this).hide();
      $("#sendEmail li.buttons").append('<img src="/wp-content/themes/default/images/template/loading.gif" alt="Loading" id="loading" />');
      $.post("/includes/sendemail.php",
//emailTo: emailToVal, 
           { emailFrom: emailFromVal, yourName: yourNameVal, yourCity: yourCityVal  },
             function(data){
            $("#sendEmail").slideUp("normal", function() {
              $("#sendEmail").before('<h3 class="register2">Success!</h3><p class="emailbox">You are on the Newsletter email list.</p>');
            });
             }
         );
    }
    return false;
  });
});

Ответы [ 3 ]

2 голосов
/ 04 декабря 2010

Ваша проверка основана на JavaScript. Большинство ботов не используют JavaScript, так как их не интересует динамическое содержимое. В качестве теста я отключил JavaScript с помощью NoScript и смог отправить вашу форму, ничего не вводя.

Никогда не доверяйте своим клиентам, вы должны выполнить проверку на сервере и предоставить страницу с ошибкой, если введенные данные неверны.

0 голосов
/ 04 декабря 2010

Вы можете захотеть иметь валидатор поля поверх всего. Есть очень хороший плагин jQuery Validation, который имеет специальные обработчики для проверки электронной почты. Проверьте это здесь: http://docs.jquery.com/Plugins/validation

Проверка электронной почты, например, будет простой как:

    $("#sendMail").validate({
        rules: {
            "emailFrom":{
                email:true
            }
        }
    });
0 голосов
/ 04 декабря 2010

Это просто - конечный пользователь просто отключает JavaScript или использует один из многих плагинов для разработчиков, чтобы отключить / настроить вашу проверку.

С такими формами вам действительно нужнополагаться на проверку на стороне сервера для эффективного решения.

...