-1

我正在创建一个带有验证码的表单。验证码是图像,对吗?(如果我错了,请告诉我。)如何知道用户输入了正确的验证码。(这意味着如何在javascript中验证验证码,甚至需要检查用户输入的大小写是否正确。)或者可能在servlet中也可以。这是我在 html 页面中的代码。

<html><body>
<script type="text/javascript"> 
function ValidateForm(frm) {
if (frm.CaptchaCode.value == "") {alert('Enter web form code.');frm.CaptchaCode.focus();return false;}  
return false;
}
function ReloadCaptchaImage(captchaImageId) {
var obj = document.getElementById(captchaImageId);
var src = obj.src;
var date = new Date();
var pos = src.indexOf('&rad=');
if (pos >= 0) { src = src.substr(0, pos); }
obj.src = src + '&rad=' + date.getTime();
return false; }
</script>
<i>Enter web form code*:</i>
<input id="CaptchaCode" name="CaptchaCode" type="text" style="width:80px; border:1px solid #999999;" maxlength="6" />
<a href="http://www.SnapHost.com"><img id="CaptchaImage" alt="Web Form Code" title="Anti-spam web forms"
style="margin-left:20px; border:1px solid #999999"
src="http://www.SnapHost.com/captcha/WebForm.aspx?id=HQWK4M77B9KH&ImgType=2" /></a>
<br /><a href="#" onclick="return ReloadCaptchaImage('CaptchaImage');">
<span style="font-size:12px;">reload image</span></a>
</body></html> 
4

1 回答 1

0

好吧,你不能。它不能在客户端可用。否则,机器人也可以运行 javascript - 你的工作将毫无意义。

但是,您可以做两件事:

AJAX 请求

您可以将用户输入的代码发送到服务器,服务器将验证答案并返回“是”或“否”。
优点:

  • 简单的
  • 您可以在每次尝试后重新生成代码

缺点:

  • 花费一点带宽
  • 延迟时,加载 AJAX 调用可能需要一段时间

不对称熵

这是一个更脆弱但更优雅的方法。通常,您所做的是发送带有验证md5码的哈希(例如,但我建议使用更强的算法)。如您所知,散列数据无法取回。因此,在 javascript 代码中,您需要对用户输入的代码进行哈希处理,并将其与您随页面发送的哈希值进行比较。

优点:

  • 用户立即被告知状态
  • 没有带宽问题

缺点:

  • 您必须在客户端实现哈希函数
  • 验证相同代码的尝试次数不受限制 - 这意味着破解您的验证码将与破解实际的哈希算法一样困难(完全不用担心)
于 2013-09-25T22:20:50.163 回答