关于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补充:关于验证码防止恶意注册的原理

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

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

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

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

关于php验证码无法显示的问题的自我反思,布布扣,bubuko.com

时间: 2024-10-10 06:39:45

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

yxcms后台验证码不显示?怎么取消yxcms后台验证码

嗨,大家好,我是YXCMS的小M老湿,(其实还是习惯大家叫我猪猪吧!)今天又要分享一则yxcms的使用技巧,当然也是yxcms用户在使用过程中很容易出现的小白问题,当然还是同样,yxcms的大神级别的人就不用看了.同样还是关爱小白,从我做起!!好了,闲话要少絮!今天要说的就是yxcms后台验证码不显示的问题,还有怎么取消yxcms后台验证码的一些小方法和技巧. 首先先讲解一下,为什么会出现yxcms后台验证码不显示的问题,其实用过cms的人都知道,验证码嘛,作用其实就是验证身份,以防止一些不好的

dedecms后台登录验证码不显示错误处理

Dede后台验证码不显示或不正常分三种情况,下面来逐一分析 Dede后台验证码不显示情况一 Dede后台验证码不显示情况二 Dede后台验证码不显示情况三 通用解决方案---取消后台验证码功能 因为没有验证码 不能进后台 所以修改php文件源代码: 方法一: 打开dede/login.php 找到如下代码 if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){ Reset

thinkphp验证码不显示

1.安装php的GD库 yum -y install php-gd 2.在输出图片前header("content-type: image/png"); 写入 header("content-type: image/png"); ob_clean(); 再不行,继续写入 ob_end_clean(); 注意:php.ini 中的  zlib.output_compression = on/off 也会影响验证码的显示

phpcms v9后台登陆验证码无法显示,怎么取消验证码

phpcms v9后台登陆验证码无法显示论坛里关于这个问题貌似一直没有解决,查看源代码后发现,关键一点是获取验证码的图片与全局变量SITE_URL相关,也就是网站的目录, 所以只要修改cache/configs/system.php文件中的网站路径变量 ‘web_path’ 即可. 举例说明(本地域名http://localhost) 如果所有的文件都在根目录下(例如apache下的htdocs),此时,默认访问地址应该是http://localhost/,则‘web_path’=>'/',若网

linux环境下验证码不显示的几种情况

linux环境下验证码不显示的几种情况 gd库扩展没有安装. 查看phpinfo(),看看有没有安装gd库 yum安装gd库或者phpize安装 安装完成后记得重启php-fpm bom头的原因 在生成验证码的脚本前加上ob_clean nginx不支持pathinfo的原因 如果你查看你的console出现404错误.那是因为nginx不支持pathinfo造成的 location ~ \.php { root H:/PHPServer/WWW; #项目目录  fastcgi_pass 127

LNMP Yii2 验证码不显示问题最终解决方案

首先,本地使用OK! 然后,新配置的LNMP环境,验证码一直显示不出来,看了Yii2的验证码存在session里,怀疑是session有问题. 在测试其他页面的时候,发现:session_start(): Failed to initialize storage module: files (path: )错误 lnmp的php.ini中这句话默认是注释掉的,所以 : 然后问题就解决了!

磁盘空间被占满导致前台的验证码无法显示

昨晚上11点多,公司的后台程序员打电话说登陆页面的验证码突然显示不出来了,我查看了一下,并和测试机上的代码做了一下比较(测试机上能正常显示,这是外包做的网站,不是自己写的),请求的地址都是一样的,地址文件也是一样的,请求也是成功的,只是没有数据的返回,之后还把实际上的文件用测试机上的文件覆盖了,还是不能正常显示,重启了服务器还是不能显示.折腾了很久,后来发现服务器上的磁盘被占满了,删除了一些多余的文件之后终于能正常显示了.之后查了一下说原来磁盘空间被占满,会出现web程序报错的情况.

stash 登录验证码不显示,报Could not initialize class sun.awt.X11FontManager错误

stash登录时提示输入验证码,可是验证码不显示了,怎么解决了? 报错信息: 再通过chrome的审查元素进行查看具体报错的原因: Error creating bean with name 'imageCaptchaServicePrototype' defined in class path resource [stash-context.xml]: Cannot create inner bean 'com.atlassian.stash.internal.web.util.captcha

phpcms 后台验证码不显示date() expects parameter 2 to be long

方法一: 主要在于是否开启gd库 查看办法 找到php.ini文件 搜索extension=php_gd2.dll这段代码 然后把前面的;符号去掉即可. 方法二: 关键一点是获取验证码的图片与全局变量SITE_URL相关,也就是网站的目录,所以只要修改cache/configs/system.php文件中的网站路径变量‘web_path’ 即可. 举例说明(本地域名http://localhost)   如果所有的文件都在根目录下(例如apache下的htdocs),此时,默认访问地址应该是ht