2010-08-08 6 views
1

Вот учебник, в котором показано, как объединить проверку формы jQuery с reCAPTCHA. http://snipplr.com/view/15563/jquery-validating-recaptcha-with-ajax/PHP - вопрос об использовании reCAPTCHA с jQuery

Основываясь на моем понимании, приведенный выше учебник фактически выполняет проверку на стороне клиента через aJax, который взаимодействует с сценарием сервера reCAPTCHA.

После того, как проверка успешна, я использую следующий код заимствованный из комментариев:

$('#formID').validate({ 
submitHandler: function(form) { 
if(validateCaptcha()){ // Submit form 
offerForm.ajaxSubmit(); } } }); 

представить форму и увидеть, пожалуйста, строка 21 из исходного кода:

$("form").attr("action", "http://action/to/the/form_handler.php"); 

Мой вопрос является ли я ДОЛЖНЫ называть recaptcha_check_answer внутри form_handler.php с переданными в параметрах

challengeField = $("input#recaptcha_challenge_field").val(); 
responseField = $("input#recaptcha_response_field").val(); 

Если нет, то человек может легко избежать reCAPTCHA, изменив процедуру проверки. Кажется, что та же идея, что мы всегда имеем дело с проверкой клиента + сервера.

Пожалуйста, исправьте мою идею, если я неправильно понял.

// Дайте подробную информацию по вопросу у меня есть ///

<code> 
    <form id="regFormBody" method="post" action="verify.php"> 
    ... 
    </code> 

     $("#regFormBody").validate({ 
      debug: true, 
      errorPlacement: function (error, element) { 
      error.insertAfter(element.parents('div.collection:first')); 
      }, 

      rules: { 
      loginemail: { required: true, email: true, rangelength: [4, 32] }, 
      password: { required: true, rangelength: [8, 30], passwordPattern: true }, 
      confirmpassword: { required: true, rangelength: [8, 30], equalTo: "#password" } 
      } 
      } 
     }); 

Вот проблема у меня есть: Если форма проходит проверку на стороне клиента, то он не не вызывает подтверждать .php и останавливается после проверки. спасибо

ответ

2

Да, это звучит правильно для меня. Да, вам определенно необходимо проверить капчу на сервере. Мне не нравится идея проверки клиентской стороны captcha вообще, и я не думаю, что вы хотите публиковать свои ключи API reCaptchi в скрипте, который пользователь может получить. Также я ожидал бы, что вторая проверка тех же самых значений captcha (ваша проверка на стороне сервера после проверки на стороне клиента) будет отклоняться серверами Recaptcha в любом случае (confirmation of this from a comment on the original blog).

Так что, я думаю, вам нужно отправить captcha в обработчик действий AJAX, и он должен выполнить валидацию, а также ваше действие. Вы можете подтвердить, что пользователь ввел что-то для перехвата, прежде чем отправлять его, но IMO вы не должны пытаться проверять его на стороне клиента вообще.

+0

Если вы проверяете клиентскую сторону, злоумышленник может ее подделать. –

+0

Здравствуйте, Rup, Я согласен с тобой, и у меня возникнет проблема, как вы уже упоминали: «в любом случае отклоняйтесь серверами Recaptcha». Теперь вопрос в том, как я могу объединить мою проверку формы jQuery с recaptcha? Другими словами, когда пользователь нажимает кнопку отправки, сначала убедитесь, что все остальные поля верны. Затем мне нужно проверить проверку и затем выполнить действие формы. Я действительно не знаю, как я могу достичь двух вещей за один раз. спасибо – q0987

+1

Я не думаю, что есть что-то, что можно комбинировать? Вы просто позволяете jQuery проверять все ваши поля, как обычно, а затем включать recaptcha в сообщение. Ваш обработчик post должен проверять капчу, а затем возвращать ошибку, если catpcha неверна так же, как вы возвращаете любую другую ошибку из вашего обработчика сообщений. Я думаю, вам нужно будет обновить элемент управления captcha, если произошла ошибка, но потом я ожидаю, что вам понадобится обновить контроль captcha в любом случае для следующей операции ajax для пользователя.Разве это не то, что вы делаете? Какие у вас проблемы? – Rup