關於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補充:關於驗證碼防止惡意注冊的原理

關於驗證碼的作用,之前只是大概了解到時為了防止惡意注冊。可是防止惡意注冊的原理是怎樣的呢?這個自己倒沒有認真思考過,腦中的概念是誰會那么無聊注冊一邊又一遍的填寫那個驗證碼啊。

很多網站在你登錄的時候或注冊的時候都要求你按隨機產生的圖片上的數字或字母輸入,為什么這么麻煩呢?那是出於安全的考慮。

以前的網站,菜鳥級的駭客都會用暴力破解軟件來破解已知他人帳戶名但是還不知道密碼這樣的帳戶原理之一就是先在"帳戶名稱"這一欄填入已知帳戶,然后破解軟件按照事先准備好的密碼規則字典逐個輸入,然后登錄。如果密碼無效(登錄失敗)便刷新登錄頁面再次輸入,直到登陸成功便返回登錄成功的有效密碼。這樣帳戶的密碼也就被破解了。所以用這樣的軟件破解一個有效帳戶的密碼只是時間的問題。

而現在在登錄頁面加入驗證碼則有效的解決了這個問題。因為驗證碼是你進入該頁面時隨機生成的一組數字,你必須輸入這組數字,再加上正確的帳戶和密碼才允許登錄。而這組圖片是以圖片的方式提供的,要想按照以前的破解方法進行破解,首先必須解決“如何提取圖片中的驗證碼”這樣的問題。但是對於目前的破解軟件而言,提取圖片式的信息是很難或者說根本不可能的。所以就達到了保護用戶帳戶安全性的目的。


 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM