“验证码”等于“流氓软件”
作者:tanggaowei 来源:蓝色理想 发布时间:2007-10-19 18:29:00
“'验证码'等于'流氓软件'”这句话本身存在逻辑问题,因为“验证码”并不是一个软件,而是软件里的一个功能。这句话的实际意思是,带“验证码”功能的软件是“流氓软件”。
请不要激动,且听我道来。
在很久很久以前(其实并不久),你登录一个系统时,只需要输入“用户名”、“密码”,然后“回车”就可以了,费不了多大劲。后来,出现了一些不良份子(多半是因为闲得无聊),利用程序反复登录网站,以获取他人密码,或使系统超负荷甚至崩溃。为了应对这样的危机,有人发明了“验证码”。
最常用的“验证码”功能,是让用户识别一张图片上的数字和字母,然后将识别的结果填入一个输入框,和其它信息一起提交给系统。图片上的数字和字母就是“验证码”。系统在执行其它操作之前,先验证用户输入的“验证码”是否和图片上的一致。如果不一致,则直接返回到客户端,不进行余下操作。直到现在,图像识别技术离成熟也还有很远,对图片上文字的识别率非常低。所以,恶意程序几乎不可能通过图片“验证码”的验证。即使偶尔能识别一次,也不可能多次连续通过“验证码”的验证。这样,利用程序反复登录,以获取他人密码的可能性几乎等于零;而且,系统只进行一次“验证码”验证,就将恶意登录打回,极大地减轻了系统负担。这样,可谓一举两得呀!
除了图片“验证码”还有其它形式,这里就不多说了。但目的都是一个,就是让人可以识别,而让机器无法识别,以防止恶意程序的攻击。
既然“验证码”功能这样好,怎么会跟“流氓软件”联系起来的呢?
“验证码”功能确实好,一上阵就所相匹敌,战无不胜!软件设计人员纷纷请它来助阵,以提高他们系统的防御能力。于是,到如今,你登录一个系统时,不只要输入“用户名”和“密码”了,你还要输入“验证码”。“用户名”和“密码”都是你记住的,很容易输入。而“验证码”是随机的,每次你都要去识别它。“验证码”功能并没有一个统一的标准,各个系统各显神通。有的加上颜色,有的加上背景图案,有的字体大小不一,有的角度不同等等,以提高机器的识别难度。机器的识别难度是提高了,可是,人的识别难度在添加。有些“验证码”常常不是第一次就能识别正确,比如数字“1”和字母“l”就很难区分,有的字母大写和小写也很难区分。虽然有些系统提供刷新“验证码”的功能,以方便用户选择一个容易识别的“验证码”进行识别。但是,这并没有从本质上解决问题,反而让用户进行了更多的操作。“验证码”功能带来的本质问题是:每次登录时都要多一个输入“验证码”的操作,而“验证码”的随机性和不易识别性,又使用输入“验证码”操作本身变得愈加艰难和痛苦!
“验证码”功能,强迫用户进行不喜欢且不必要(以前就没有)的操作,而且没有任何选择的余地,霸道得很。用户虽然咬牙切齿,却无能为力。所以,它对用户来说,却成了一个恶意功能。正规软件加上恶意功能就成了“流氓软件”。
那么,前面花大段落描述了“验证码”功能对系统安全的好处,难道都是骗人的吗?
当然不是。“验证码”功能的出发点是好的,它的本质也是好的,只是,当它表现给用户时,选择的表现形式有问题。就像“广告”,本身并不是恶意的,只是当它以“强行弹出”的形式表现出来就变成了恶意。


猜你喜欢
- 网页设计遇到最大的麻烦之一莫过于网页对不同浏览器的兼容性问题了,因为IE 6.0 / IE 7.0 / firefox 2 / Opera
- 手绘图片生成器可以将导入的彩色图片通过python分析光源、灰度等操作生成手绘图片。UI界面的整体部分代码块,UI界面的设计比较简单。效果在
- 很久以前我们在写sql的时候,最怕的一件事情就是sql莫名奇妙的超级慢,慢的是撸一管子回来,那个小球还在一直转。。。这个着急也只有当事人才明
- 定义流的作用是使用统一的方式处理文件、网络和数据压缩等共用同一套函数和用法的操作。简单而言,流是具有流式行为的资源对象。因此,流可以线性读写
- 如下所示:import torchfrom torch.autograd import Variableimport matplotlib.
- 本文实例讲述了java实现的连接oracle mysql数据库功能。分享给大家供大家参考,具体如下:package com.nuo.test
- 要想从命令行启动mysqld服务器,你应当启动控制台窗口(或“DOS window”)并输入命令:C
- 将 PDF 转换为 CSV在机器学习中,我们应该少一些“数据清理”,多一些“数据
- 前言for循环是Go语言唯一的循环结构,最近在做一个基于RabbitMQ的应用,由于官方的qos没有golang的版本,所以出了一点问题。问
- 1.类方法类方法是从属于"类对象"的方法。类对象可以通过装饰器@classmethod来定义,具体格式如下:@class
- 前言作为一个数据库,作为数据库中的一张表,随着用户的增多随着时间的推移,总有一天,数据量会大到一个难以处理的地步。这时仅仅一张表的数据就已经
- 都知道django每次请求都会连接数据库和释放数据库连接。Django为每个请求使用新的数据库连接。一开始这个方法行得通。然而随着服务器上的
- 一、撤销修改(git add/rm 之前)git checkout -- * //是撤销从上次提交之后所做的所有修改git c
- 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图直方图的背景知识、用途
- 本文实例借鉴mvc模式,核心数据为model,维护1个矩阵,0表无雷,1表雷,-1表已经检测过。本例使用python的tkinter做gui
- Python中的penpyxl是一个第三方库,可以处理xlsx格式的Excel文件。pip install openpyxl安装。penpy
- Session StaticObjects 集合StaticObjects 集合包含 Session 对象范围中用 <OBJECT&g
- 1、string-->numberstring类型 *1 即可变成 number类型2
- 1.基本构架:mport PIL.Image 相关模块img=Image.open(img_name) 打开图片img.save(save_
- 前言这篇文章介绍一下 递归,递归的本质是将原来的问题转化为更小的同一个问题,解决这些更小问题的过程。下面通过两个递归的例子帮助学习对递归的理