新聞中心
驗(yàn)證碼的由來(lái)

為企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站優(yōu)化、全網(wǎng)營(yíng)銷推廣、競(jìng)價(jià)托管、品牌運(yùn)營(yíng)等營(yíng)銷獲客服務(wù)。成都創(chuàng)新互聯(lián)擁有網(wǎng)絡(luò)營(yíng)銷運(yùn)營(yíng)團(tuán)隊(duì),以豐富的互聯(lián)網(wǎng)營(yíng)銷經(jīng)驗(yàn)助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營(yíng)銷獲客難題,做到“讓獲客更簡(jiǎn)單”。自創(chuàng)立至今,成功用技術(shù)實(shí)力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營(yíng)銷”三大難題,同時(shí)降低了營(yíng)銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認(rèn)可!
幾年前,大部分網(wǎng)站、論壇之類的是沒(méi)有驗(yàn)證碼的,因?yàn)閷?duì)于一般用戶來(lái)說(shuō)驗(yàn)證碼只是增加了用戶的操作,降低了用戶的體驗(yàn)。但是后來(lái)各種灌水機(jī)器人、投票機(jī)器人、惡意注冊(cè)機(jī)器人層出不窮,大大增加了網(wǎng)站的負(fù)擔(dān)同時(shí)也給網(wǎng)站數(shù)據(jù)庫(kù)帶來(lái)了大量的垃圾數(shù)據(jù)。為了防止各種機(jī)器人程序的破壞,于是程序員想出了只有人眼能夠識(shí)別的,程序不容易識(shí)別的驗(yàn)證碼!
驗(yàn)證碼是一個(gè)圖片,將字母、數(shù)字甚至漢字作為圖片的內(nèi)容,這樣一張圖片中的內(nèi)容用人眼很容易識(shí)別,而程序?qū)o(wú)法識(shí)別。在進(jìn)行數(shù)據(jù)庫(kù)操作之前(比如登錄驗(yàn)證、投票、發(fā)帖、回復(fù)、注冊(cè)等等)程序首先驗(yàn)證客戶端提交的驗(yàn)證碼是否與圖片中的內(nèi)容相同,如果相同則進(jìn)行數(shù)據(jù)庫(kù)操作,不同則提示驗(yàn)證碼錯(cuò)誤,不進(jìn)行數(shù)據(jù)庫(kù)操作。這樣各種機(jī)器人程序就被拒之門外了!
但是隨著計(jì)算機(jī)科學(xué)的發(fā)展,模式識(shí)別等技術(shù)越來(lái)越成熟,于是編寫機(jī)器人程序的家伙可以通過(guò)程序?qū)⒅苯訉懺趫D片中的內(nèi)容識(shí)別出來(lái),然后提交到服務(wù)器,這樣驗(yàn)證碼將形同虛設(shè)。為了防止機(jī)器人程序的識(shí)別,驗(yàn)證碼的圖片生成也不斷在發(fā)展,加入干擾點(diǎn)、干擾線,文字變形、變換角度位置,顏色不同……各種防止計(jì)算機(jī)識(shí)別的技術(shù)也應(yīng)用到驗(yàn)證碼中。就在這兩種技術(shù)的競(jìng)爭(zhēng)中,于是便形成了我們現(xiàn)在看到的驗(yàn)證碼,已經(jīng)有很多人在抱怨“這是什么驗(yàn)證碼哦,人眼都分辨不清楚是什么”,一切也是無(wú)奈。
驗(yàn)證碼的使用
驗(yàn)證碼是針對(duì)各種機(jī)器人程序的,所以驗(yàn)證碼圖片中的內(nèi)容是不能存放在Cookie、HTML和URL中的,如果看到一個(gè)驗(yàn)證碼圖片的URL是http://xxxxxx.com/Expwd.aspx?code=1af8 而驗(yàn)證碼圖片中的內(nèi)容就是1af8那將是十分可笑的事情。同時(shí),如果通過(guò)抓包發(fā)現(xiàn)了Cookie中保存了驗(yàn)證碼的值或者查看HTML時(shí)看到了形如:< input type="hidden" id="exPwd" name="exPwd" value="1af8"/>這樣將驗(yàn)證碼的內(nèi)容放在隱藏元素中也是不可思議的。對(duì)于這些行為,顯然是這個(gè)程序員不知道驗(yàn)證碼是拿來(lái)干什么的,只是別人的網(wǎng)站上有驗(yàn)證碼,與自己的網(wǎng)站也弄一個(gè)來(lái)趕時(shí)髦。另外還有一種好笑的是驗(yàn)證碼看上去像是驗(yàn)證碼,結(jié)果看HTML代碼居然不是一個(gè)圖片,而是一個(gè)< span>1< /span>< span>a< /span>< span>f< /span>< span>8< /span>。大家不要不以為然,以上這幾種情況還真是我現(xiàn)實(shí)生活中遇到過(guò)的,當(dāng)年寫投票機(jī)器人的時(shí)候遇到這種情況我***興了?。?!
驗(yàn)證碼的內(nèi)容必須保存在服務(wù)器端,一般我們可以將隨機(jī)生成的驗(yàn)證碼的內(nèi)容放入Session中,用戶提交的時(shí)候?qū)⑻峤坏膬?nèi)容與Session中的驗(yàn)證碼進(jìn)行比較判斷。在生成驗(yàn)證碼的頁(yè)面后臺(tái)代碼可以寫為:
- protectedvoidPage_Load(objectsender,EventArgse)
- {
- stringcheckCode=CreateCode(4);
- Session["CheckCode"]=checkCode;
- CreateImage(checkCode);
- }
比如在登錄進(jìn)行驗(yàn)證的時(shí)候可以寫為:
- protectedvoidbtnLogin_Click(objectsender,ImageClickEventArgse)
- {
- if(Session["CheckCode"]==null)
- {
- UIHelper.Alert(Page,"驗(yàn)證碼已過(guò)期,請(qǐng)重新輸入");
- return;
- }
- if(Session["CheckCode"].ToString().ToLower()!=txbCode.Text.ToLower())
- //驗(yàn)證碼忽略大小寫
- {
- UIHelper.Alert(Page,"驗(yàn)證碼錯(cuò)誤");
- return;
- }
- //數(shù)據(jù)庫(kù)驗(yàn)證……
- }
C#搞定網(wǎng)站驗(yàn)證碼
前面我們已經(jīng)對(duì)整個(gè)驗(yàn)證碼的原理和使用有了基本的了解,現(xiàn)在言歸正傳,講講如何C#搞定網(wǎng)站驗(yàn)證碼。這里我們以CSDN的登錄為例。
1.在IE中正常登錄一次并把登錄時(shí)候的數(shù)據(jù)包抓下來(lái)。
2.分析其中的登錄原理如下:
1)請(qǐng)求http://passport.csdn.net/UserLogin.aspx頁(yè)面,與服務(wù)器建立會(huì)話,服務(wù)器返回一個(gè)SessionID在HTTP的Header中,如下,其他內(nèi)容我們可以忽略。
2)該頁(yè)面返回的HTML中有一個(gè)這個(gè)值在登錄提交時(shí)也需要,所以需要從HTML代碼中分離出來(lái)。
3)將該SessionID作為Cookie的內(nèi)容發(fā)送到驗(yàn)證碼生成的頁(yè)面http://passport.csdn.net/ShowExPwd.aspx該頁(yè)面將返回一個(gè)圖片的二進(jìn)制流。
4)將返回的二進(jìn)制流轉(zhuǎn)換為圖片并呈現(xiàn)給用戶。
- Imageimg=newBitmap(
- Http.GetStreamByBytes(http://passport.csdn.net"
http://passport.csdn.net/ShowExPwd.aspx",b,- aspcookie,outheader));//獲得驗(yàn)證碼圖片
- this.pictureBox1.Image=img;
5)用戶輸入用戶名、密碼和驗(yàn)證碼,然后和同前面分離出的ClientKey按如下的格式POST到http://passport.csdn.net/UserLogin.aspx進(jìn)行驗(yàn)證。
6)驗(yàn)證成功的話將返回包含用戶信息(發(fā)帖數(shù)、積分、博客排名等等)的HTML,驗(yàn)證失敗將返回具體的錯(cuò)誤信息。
3.以上將CSDN的登錄原理分析清楚了,那么接下來(lái)就是代碼實(shí)現(xiàn)了,代碼實(shí)現(xiàn)比較簡(jiǎn)單,我直接在上篇文章所使用的Demo代碼上修改的,所以寫的不是很漂亮,大家若有興趣可以看看。/Files/studyzy/LoginCSDNDemo.rar
成功登錄后如圖:
以上介紹C#搞定網(wǎng)站驗(yàn)證碼
分享文章:C#搞定網(wǎng)站驗(yàn)證碼的方法
分享路徑:http://www.fisionsoft.com.cn/article/cdjhhjh.html


咨詢
建站咨詢
