2013-09-19 2 views
1

У меня есть html-форма с проверкой captcha, и я использую скрипт java для создания captcha. он вводит значение captcha из java-скрипта во входной файл, но он не проверяет нажатие кнопки и публикацию формы. Ниже я поставил ссылку на скрипкуjavascript captcha not validating

<form action="/Admin/Public/FormMailer.aspx" method="post" id="FormSave1" enctype="multipart/form-data" name="FormSave1" style="margin-top:20px"> 
     <input type="hidden" name="FM_Charset" value="iso-8859-1" /> <input type="hidden" name="FM_html" value="true" /> 
     <input type="hidden" name="FM_Subject" value="E-mail from my website" /> <input type="hidden" name="FM_FromEmail" value="" /> 
     <input type="hidden" name="FM_FromName" value="Dynamicweb FORMAILER" /> 
     <input type="hidden" name="FM_Template" value="Mail.html" /> <input type="hidden" name="FM_ToEmail" value="" /> 
     <input type="hidden" name="FM_ToEmail" value="" /> 
<table> 
     <tbody> 
<tr> 
<td>INDTAST TALLET HERUNDER</td> 
<td><input type="text" id="txtCaptcha" style="background-image:url(1.jpg); text-align:center; border:none;font-weight:bold; font-size: 16px;" disabled=""> 
</td> 
</tr> 
<tr> 
<td><td></td><td> 
<input type="text" id="txtInput" style="margin-left: 20px; text-align: center;" required> 
</td> 
</tr> 
<td> 
<input type="submit" id="submit" onclick="ValidCaptcha();"> 
</td> 
</tbody></table> 
    </form> 

Java Script

function DrawCaptcha() 
    { 
    var a = Math.ceil(Math.random() * 10)+ ''; 
    var b = Math.ceil(Math.random() * 10)+ ''; 
    var c = Math.ceil(Math.random() * 10)+ ''; 
    var d = Math.ceil(Math.random() * 10)+ ''; 
    var e = Math.ceil(Math.random() * 10)+ ''; 
    var f = Math.ceil(Math.random() * 10)+ ''; 
    var g = Math.ceil(Math.random() * 10)+ ''; 
    var code = a + '' + b + '' + '' + c + '' + d + '' + e + ''+ f + '' + g; 
    document.getElementById("txtCaptcha").value = code 
     } 

     // Validate the Entered input aganist the generated security code function 
    function ValidCaptcha(){ 
     var str1 = removeSpaces(document.getElementById('txtCaptcha').value); 
    var str2 = removeSpaces(document.getElementById('txtInput').value); 

    if (str1 == str2) { 
     //TRUE 
     $("form").submit(); 
    } else { 
     //FALSE 
     alert("TALLET ER FORKERT!"); 
    } 

    } 

    // Remove the spaces from the entered and generated code 
    function removeSpaces(string) 
    { 
    return string.split(' ').join(''); 
    } 

    $(document).ready(function() { 
    DrawCaptcha(); 
    javascript:enableField() 
     }); 

link to fiddle

+0

Что предполагают, чтобы сделать: 'JavaScript: enableField()' ??? Он отсутствует в вашем jsfiddle –

+0

, если я удалю [javascript: enableField()] код все еще работает .... но в чем причина? он опубликовал страницу без проверки –

+0

исправил jsfiddle, должен работать так, как вы ожидаете: http://jsfiddle.net/Y6JpA/1/ –

ответ

2
  • Прежде всего: Captcha должно быть подтверждено на стороне сервера, а не в JavaScript. В вашем случае каждый может отправить форму вручную, даже не введя ничего в поле captcha.
  • Второе: Captcha не должен быть в текстовой форме (!). Каждый, кто хотел бы сломать его, просто скопировал бы текст.

Итак, ваш Captcha совершенно бесполезен. Это раздражает реальных пользователей и вообще не защищает от автоматических запросов.


И как на ваш вопрос:

-> Изменить функцию Validate:

if (str1 == str2) { 
    //TRUE 
    return 1; 
} else { 
    //FALSE 
    alert("TALLET ER FORKERT!"); 
    return 0; 
} 

-> И добавьте этот код в документе готовой функции:

document.getElementById('FormSave1').onsubmit = function() { 
    if(!ValidCaptcha()) 
     return false; 
} 

- > Удалите строку onclick для кнопки отправки.

Fiddle

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

+0

«Итак, ваш Captcha совершенно бесполезен». +1 –

+0

вы 100% обряд, но по какой-то причине я не могу делать серверные скрипты, поэтому я должен выбрать этот способ для своего решения. но любой, как вы можете сказать мне причину, почему это так? –

+0

@UmarKhan отредактирован, ответьте выше. –