为什么需要做这样的保护呢?——给出
优采云 发布时间: 2021-08-14 05:23为什么需要做这样的保护呢?——给出
首先给个结论:没有浏览器可以自动填写验证码。
要说原因,我先说一下验证码是什么:验证码的意思是通过添加GUI强交互来保护一些特定的服务端RestApi。简单来说就是防止机器自动刷机,强制每次提交网络请求都由人提交,而不是机器。
验证码可以看作是计算机科学领域图灵测试的一个分支。
我们为什么需要这样的保护?因为后端有很多涉及复杂计算的服务器端API,如果前台在短时间内发送大量无意义的网络请求,会对服务器造成巨大的压力;并且如果黑客编写了一个网络攻击者来自动化批量发送大量网络请求,服务器可能会以很小的带宽成本被暂停;在这种情况下,即使服务器限制了访问者的ip地址,在一定时间内从同一个ip地址发出的请求数限制可能也无济于事,因为对于大网站,黑客可以购买ip池进行攻击不同ip的服务器。更重要的是,一些网络接口与短信渠道相关联。例如,发送网络请求会向目标手机发送验证码。如果这样的接口被黑客发现了,就可以让一组短信*敏*感*词*攻击者……无休止的麻烦。
综上所述,在这种情况下,没有验证码保护,服务器端存在巨大的安全风险。因此,验证码的必要性必须存在。
另外,题主说的——“我看到很多抢票软件,可以自动填写铁道部的验证码,技术上来说是没有问题的。”这句话得出的结论是完全错误的。从技术上来说,这件事情绝非没有问题,而是一个一脚的高度增加一脚的过程。因为抢票背后的利益太大了,值得网络开发者投身这件事文章。现在,所有破解验证码的手段都是机器学习,通过图像识别将验证码识别的过程写成一套自动化程序。但是,机器学习的前提是需要大量的训练样本。在这个场景中,需要获取大量的“验证码图片”和“验证码结果”的匹配对,并将这些样本带到机器学习的算法模块进行处理。对于训练,样本数量越多,脏数据越干净,机器识别验证码的准确率越高。
以目前的图像识别技术,简单的字符串验证码是可以破解的,但是对于题主提到的12306购票系统的验证码,需要积累大量的训练样本来训练机器学习模块。这个样本数据的采集难度极大,因为12306为了防止机器刷验证码,把验证码的标题设置得很不正常。即使是普通用户也可能会不小心输入错误的代码。在这种情况下,对于采集获得的样本,无论怎样都难以保证数据是“干净的”。脏数据会大大降低经过训练的图像识别模块的准确率。
但是对于题主的问题,大学教务系统的验证码确实可以通过这些方法破解。通过破解,可以破解学生登录账号中的一些弱密码,但破解时间较长,一般学校教务系统通过内网访问。如果你在内网下运行这样的暴力破解程序,服务器可以根据ip地址查询到你的具体位置,至少在你拿到之前先定位到。对你用来入侵内网的路由器来说,难度其实不小。
对于网络验证码,我已经写了很多相关的技术资料,有兴趣的可以看看:
CSRF漏洞原理