首页 > 代码库 > 关于php验证码无法显示的问题的自我反思

关于php验证码无法显示的问题的自我反思

很早之前在金华佗创业团队的时候,团队的内部网站后台登陆的验证码无法正常显示。当时正在开始学习php,所以对于php的绘图技术并不了解,也不知道验证码的作用....

我请教一个学习php的师兄,师兄可能当时比较忙吧,他给我的建议就是去服务器,把验证码这一块的代码给注释了,不用验证码的功能。这样做果然省事,但只是个权宜之计,只能暂时蒙一蒙不懂技术的老板,所以当时这件事情就暂时过去了.

事后我反思了一下,有两点感悟:

1)一个科技公司,有一个技术总监很重要。不懂技术的话,老板也会被一个菜鸟“欺负”

2)对于一个程序员来讲,遇到问题,选择逃避的话是永远不会成长。搞技术就是一个不断遇到问题到熟悉解决问题的过程,这就是企业招人时很注重的项目经验。

第一次遇到验证码无法显示的问题,我选择了逃避,所以也错过了学习新知识的机会。直到后来自己独立开发的一个项目,里面也有GD验证码验证。这一次,我决定对它一探个究竟...

原来php里面封装了一个叫GD的函数库,主要负责实现php绘图的功能。而验证码,主要包含了两部分:随机数字和有php绘制出来的图片,两者都是随机组合的。四个随机数字的话是通过调用一个叫rand()函数生成,验证码中那些让你看不清验证数字的图片则是通过调用GD库中的函数来绘制而成。有了这样一个概念之后,要想实现验证码功能,所以要在php.ini(php配置文件)启用GD库。之前自己遇到的验证码无法显示的原因,主要是由于没有在php.ini文件中启用GD库。

如何查看是否启用GD库呢?

通过一个叫phpinfo()函数,可以查看所有跟php相关的配置信息。

配置信息显示如下:

这里显示的GD support 的状态为enabled,说明我的GD库已经启用。如果显示的是disabled,说明未启用。下面主要针对未启用的情况来讲解。

第一步:通过phpinfo()函数查看所有的php配置信息,并在配置信息中查看php.ini文件所在的路径。

找到“Loaded Configuration File”选项,它就是指配置信息文件所在的位置。这里显示的本机安装appserver后php.ini文件的路径为“C:\windows\php.ini”,然后去C盘的windows目录下找到php.ini文件:

用我心爱的sublime text3打开该文件:

 

在文件中找到extension=php_gd2.dll(或者extension=php_gd.dll)选项,把前面的“;”去掉即可,重启apache,这时就可以看到你的验证码了

//==============================================================================================//

通过以上的方法解决了验证码显示的问题,显得很有成就感,学习的自信也就是这样一点一点的建立起来了 。

PS补充:关于验证码防止恶意注册的原理

关于验证码的作用,之前只是大概了解到时为了防止恶意注册。可是防止恶意注册的原理是怎样的呢?这个自己倒没有认真思考过,脑中的概念是谁会那么无聊注册一边又一遍的填写那个验证码啊。

很多网站在你登录的时候或注册的时候都要求你按随机产生的图片上的数字或字母输入,为什么这么麻烦呢?那是出于安全的考虑。

以前的网站,菜鸟级的骇客都会用暴力破解软件来破解已知他人帐户名但是还不知道密码这样的帐户原理之一就是先在"帐户名称"这一栏填入已知帐户,然后破解软件按照事先准备好的密码规则字典逐个输入,然后登录。如果密码无效(登录失败)便刷新登录页面再次输入,直到登陆成功便返回登录成功的有效密码。这样帐户的密码也就被破解了。所以用这样的软件破解一个有效帐户的密码只是时间的问题。

而现在在登录页面加入验证码则有效的解决了这个问题。因为验证码是你进入该页面时随机生成的一组数字,你必须输入这组数字,再加上正确的帐户和密码才允许登录。而这组图片是以图片的方式提供的,要想按照以前的破解方法进行破解,首先必须解决“如何提取图片中的验证码”这样的问题。但是对于目前的破解软件而言,提取图片式的信息是很难或者说根本不可能的。所以就达到了保护用户帐户安全性的目的。