一个有趣的验证码生成方式

##引入

晚上在宿舍想看看论文,于是登录图书馆主页,转到知网,结果被告知ip未授权,看来只有内网可以访问那个帐号。
尝试用x-forwarded-for构造ip,失败。
正好发现图书馆登录时的验证码很有趣,找到源码分析一下。

##代码分析

一段js代码,一段表单代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$(function(){
$("#captcha_tips").hide();
$("#img").hide();
$("#captcha").focus(function(){
$("#captcha_tips").show();
$("#img").attr("src","captcha.php?code=" + $("#number").val());
$("#img").show();
});
});

<input type="text" name="number" id="number" class="input">
<input type="password" size="20" name="passwd" class="input">
<input type="text" placeholder="点击获取验证码" name="captcha" class="input" id="captcha">
<td id="captcha_tips">
请输入下面显示的红色内容<br>
<img id="img" src="captcha.php" style="display: none;">
</td>

正常流程如下:

  1. 用户输入纯数字id
  2. 用户输入密码
  3. 用户点击用来输入验证码的输入框,此时执行js语句
    $("#img").attr("src","captcha.php?code=" + $("#number").val());
    页面 captcha.php?code=xxxxxx 的作用是返回一个含有数字xxxxxx的图片,其中随机将若干数字设为红色
    这样,我们就得到了一个基于用户输入的id的验证码
  4. 用户输入验证码图片中的红色部分,登录

但是,我偏不这么来。
首先明确:当我 focus 验证码输入框的时候,产生的验证码就是用户的id(其中若干数字变红)

我先在用户 id 输入框中输一个 1
然后 focus 验证码输入框,显然验证码是 1 ,并且为红色(经测试,一个数字时永远为红色)
然后重新输入 id 和密码,登录,OK

##总结

从直觉上看,这样的逻辑是有一定问题的,不过好像没有什么利用价值。
对,我只是练练笔。