成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#搞定網站驗證碼的方法

開發 后端
本文主要介紹C#搞定網站驗證碼的方法,首先介紹驗證碼的由來、驗證碼的使用,最后介紹C#搞定網站驗證碼,以CSDN的登錄為例。

驗證碼的由來

幾年前,大部分網站、論壇之類的是沒有驗證碼的,因為對于一般用戶來說驗證碼只是增加了用戶的操作,降低了用戶的體驗。但是后來各種灌水機器人、投票機器人、惡意注冊機器人層出不窮,大大增加了網站的負擔同時也給網站數據庫帶來了大量的垃圾數據。為了防止各種機器人程序的破壞,于是程序員想出了只有人眼能夠識別的,程序不容易識別的驗證碼!

驗證碼是一個圖片,將字母、數字甚至漢字作為圖片的內容,這樣一張圖片中的內容用人眼很容易識別,而程序將無法識別。在進行數據庫操作之前(比如登錄驗證、投票、發帖、回復、注冊等等)程序首先驗證客戶端提交的驗證碼是否與圖片中的內容相同,如果相同則進行數據庫操作,不同則提示驗證碼錯誤,不進行數據庫操作。這樣各種機器人程序就被拒之門外了!

但是隨著計算機科學的發展,模式識別等技術越來越成熟,于是編寫機器人程序的家伙可以通過程序將直接寫在圖片中的內容識別出來,然后提交到服務器,這樣驗證碼將形同虛設。為了防止機器人程序的識別,驗證碼的圖片生成也不斷在發展,加入干擾點、干擾線,文字變形、變換角度位置,顏色不同……各種防止計算機識別的技術也應用到驗證碼中。就在這兩種技術的競爭中,于是便形成了我們現在看到的驗證碼,已經有很多人在抱怨“這是什么驗證碼哦,人眼都分辨不清楚是什么”,一切也是無奈。

驗證碼的使用

驗證碼是針對各種機器人程序的,所以驗證碼圖片中的內容是不能存放在Cookie、HTML和URL中的,如果看到一個驗證碼圖片的URL是http://xxxxxx.com/Expwd.aspx?code=1af8 而驗證碼圖片中的內容就是1af8那將是十分可笑的事情。同時,如果通過抓包發現了Cookie中保存了驗證碼的值或者查看HTML時看到了形如:< input type="hidden" id="exPwd" name="exPwd" value="1af8"/>這樣將驗證碼的內容放在隱藏元素中也是不可思議的。對于這些行為,顯然是這個程序員不知道驗證碼是拿來干什么的,只是別人的網站上有驗證碼,與自己的網站也弄一個來趕時髦。另外還有一種好笑的是驗證碼看上去像是驗證碼,結果看HTML代碼居然不是一個圖片,而是一個< span>1< /span>< span>a< /span>< span>f< /span>< span>8< /span>。大家不要不以為然,以上這幾種情況還真是我現實生活中遇到過的,當年寫投票機器人的時候遇到這種情況我***興了!!!

驗證碼的內容必須保存在服務器端,一般我們可以將隨機生成的驗證碼的內容放入Session中,用戶提交的時候將提交的內容與Session中的驗證碼進行比較判斷。在生成驗證碼的頁面后臺代碼可以寫為:

  1. protectedvoidPage_Load(objectsender,EventArgse)  
  2. {  
  3. stringcheckCode=CreateCode(4);  
  4. Session["CheckCode"]=checkCode;  
  5. CreateImage(checkCode);  

比如在登錄進行驗證的時候可以寫為:

  1. protectedvoidbtnLogin_Click(objectsender,ImageClickEventArgse)  
  2. {  
  3. if(Session["CheckCode"]==null)  
  4. {  
  5. UIHelper.Alert(Page,"驗證碼已過期,請重新輸入");  
  6. return;  
  7. }  
  8. if(Session["CheckCode"].ToString().ToLower()!=txbCode.Text.ToLower())  
  9. //驗證碼忽略大小寫  
  10. {  
  11. UIHelper.Alert(Page,"驗證碼錯誤");  
  12. return;  
  13. }  
  14. //數據庫驗證……  
  15. }  

C#搞定網站驗證碼

前面我們已經對整個驗證碼的原理和使用有了基本的了解,現在言歸正傳,講講如何C#搞定網站驗證碼。這里我們以CSDN的登錄為例。

CSDN的登錄

1.在IE中正常登錄一次并把登錄時候的數據包抓下來。

2.分析其中的登錄原理如下:

1)請求http://passport.csdn.net/UserLogin.aspx頁面,與服務器建立會話,服務器返回一個SessionID在HTTP的Header中,如下,其他內容我們可以忽略。

2)該頁面返回的HTML中有一個<input type="hidden" name="ClientKey" value="a50b14fa-2a75-4364-bbeb-3b498b72aa46" />這個值在登錄提交時也需要,所以需要從HTML代碼中分離出來。

3)將該SessionID作為Cookie的內容發送到驗證碼生成的頁面http://passport.csdn.net/ShowExPwd.aspx該頁面將返回一個圖片的二進制流。

4)將返回的二進制流轉換為圖片并呈現給用戶。

  1. Imageimg=newBitmap(  
  2. Http.GetStreamByBytes(
  3. aspcookie,outheader));//獲得驗證碼圖片  
  4. this.pictureBox1.Image=img

5)用戶輸入用戶名、密碼和驗證碼,然后和同前面分離出的ClientKey按如下的格式POST到http://passport.csdn.net/UserLogin.aspx進行驗證。

6)驗證成功的話將返回包含用戶信息(發帖數、積分、博客排名等等)的HTML,驗證失敗將返回具體的錯誤信息。

3.以上將CSDN的登錄原理分析清楚了,那么接下來就是代碼實現了,代碼實現比較簡單,我直接在上篇文章所使用的Demo代碼上修改的,所以寫的不是很漂亮,大家若有興趣可以看看。/Files/studyzy/LoginCSDNDemo.rar
成功登錄后如圖:

成功登錄


以上介紹C#搞定網站驗證碼

【編輯推薦】

  1. C# Iterator迭代器模式
  2. 概述C# New運算符
  3. C# WiteOne學習筆記
  4. 用C# ListView顯示數據記錄
  5. C# ConfigDlg.cs源程序
責任編輯:佚名 來源: IT168
相關推薦

2009-08-13 10:47:29

C#創建驗證碼

2009-08-06 16:30:58

C#代碼和驗證碼圖片

2014-04-24 10:09:05

驗證碼C#

2021-06-10 18:24:59

反爬蟲驗證碼爬蟲

2015-03-17 09:28:04

2021-08-02 12:29:15

Python爬蟲網站

2013-06-19 10:19:59

2009-11-23 16:59:23

PHP圖形驗證碼

2009-12-11 15:17:52

PHP驗證碼調用

2022-02-11 07:10:15

驗證碼

2021-01-19 10:29:34

短信驗證碼密碼

2020-11-16 07:28:53

驗證碼

2023-04-04 09:13:15

2009-08-20 13:47:57

C#驗證輸入方法

2011-11-02 12:43:33

2011-11-02 16:46:41

2019-06-18 07:12:25

驗證碼漏洞加密

2009-02-09 14:17:36

2009-08-11 14:05:28

JSP驗證碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久国产精品免费免费狐狸 | 日日草夜夜草 | 中文字幕在线视频网站 | 久久久久久综合 | 精产国产伦理一二三区 | 亚洲视频免费观看 | 国产精品一区二区三区在线 | 在线天堂免费中文字幕视频 | 日日干日日色 | 在线观看国产视频 | 欧美三级免费观看 | 欧美久久一区二区三区 | 国产精品久久久久久吹潮日韩动画 | 久亚州在线播放 | 成人小视频在线观看 | 日韩精品久久久久 | 精品91久久| 一级亚洲| 一本色道精品久久一区二区三区 | 亚洲精品一区二区三区中文字幕 | 成人h电影在线观看 | 欧美老妇交乱视频 | 久久久人成影片一区二区三区 | 337p日本欧洲亚洲大胆 | av成人在线观看 | 欧美乱大交xxxxx另类电影 | 久色视频在线观看 | 日韩国产中文字幕 | 综合亚洲视频 | 免费在线观看毛片 | 欧美中文字幕一区二区三区亚洲 | 国产精品1区 | 欧美一区二区三区一在线观看 | 天天视频一区二区三区 | 91欧美| 久久久国产一区二区三区 | 99精品亚洲国产精品久久不卡 | 99精品国产一区二区青青牛奶 | 欧美精品二区 | 青青草视频网站 | 麻豆亚洲|