使用C#登录带验证码的网站

news/2024/5/20 12:28:36/文章来源:https://blog.csdn.net/weixin_30814223/article/details/95035164

我在上一篇文章中已经讲解了一般网站的登录原来和C#的登录实现,很多人问到对于使用了验证码的网站该怎么办,这里我就讲讲验证码的原理和对应的登录方法。

验证码的由来

几年前,大部分网站、论坛之类的是没有验证码的,因为对于一般用户来说验证码只是增加了用户的操作,降低了用户的体验。但是后来各种灌水机器人、投票机器人、恶意注册机器人层出不穷,大大增加了网站的负担同时也给网站数据库带来了大量的垃圾数据。为了防止各种机器人程序的破坏,于是程序员想出了只有人眼能够识别的,程序不容易识别的验证码!

验证码是一个图片,将字母、数字甚至汉字作为图片的内容,这样一张图片中的内容用人眼很容易识别,而程序将无法识别。在进行数据库操作之前(比如登录验证、投票、发帖、回复、注册等等)程序首先验证客户端提交的验证码是否与图片中的内容相同,如果相同则进行数据库操作,不同则提示验证码错误,不进行数据库操作。这样各种机器人程序就被拒之门外了!

但是随着计算机科学的发展,模式识别等技术越来越成熟,于是编写机器人程序的家伙可以通过程序将直接写在图片中的内容识别出来,然后提交到服务器,这样验证码将形同虚设。为了防止机器人程序的识别,验证码的图片生成也不断在发展,加入干扰点、干扰线,文字变形、变换角度位置,颜色不同……各种防止计算机识别的技术也应用到验证码中。就在这两种技术的竞争中,于是便形成了我们现在看到的验证码,已经有很多人在抱怨“这是什么验证码哦,人眼都分辨不清楚是什么”,一切也是无奈。

验证码的使用

验证码是针对各种机器人程序的,所以验证码图片中的内容是不能存放在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中的验证码进行比较判断。在生成验证码的页面后台代码可以写为:

protected void Page_Load(object sender, EventArgs e)
   {
       
string checkCode = CreateCode(4);
       Session[
"CheckCode"= checkCode;
       CreateImage(checkCode);
   } 

比如在登录进行验证的时候可以写为:

protected void btnLogin_Click(object sender, ImageClickEventArgs e)
  {
      
if (Session["CheckCode"== null)
      {
          UIHelper.Alert(Page, 
"验证码已过期,请重新输入");
          
return;
      }
      
if (Session["CheckCode"].ToString().ToLower() != txbCode.Text.ToLower())//验证码忽略大小写
      {
          UIHelper.Alert(Page, 
"验证码错误");
          
return;
      } 
//数据库验证…… 
}

 

使用C#登录带验证码的网站

前面我们已经对整个验证码的原理和使用有了基本的了解,现在言归正传,讲讲如何登录带验证码的网站。这里我们以CSDN的登录为例。

image

1.在IE中正常登录一次并把登录时候的数据包抓下来。

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

1)请求http://passport.csdn.net/UserLogin.aspx页面,与服务器建立会话,服务器返回一个SessionID在HTTP的Header中,如下,其他内容我们可以忽略。

ASP.NET_SessionId=ydebagnqgiiixi2dvihfw355; path=/; HttpOnly,ABCDEF=; domain=csdn.net; expires=Tue, 22-Apr-2008 17:57:01 GMT; path=/,QWERTOP=; domain=csdn.net; expires=Tue, 22-Apr-2008 17:57:01 GMT; path=/,activeUserName=Guest; domain=csdn.net; expires=Tue, 22-Apr-2008 17:57:01 GMT; path=/,UserName=Guest; domain=csdn.net; expires=Tue, 22-Apr-2008 17:57:01 GMT; path=/,PName=; domain=csdn.net; expires=Tue, 22-Apr-2008 17:57:01 GMT; path=/,ClientKey=; expires=Tue, 22-Apr-2008 17:57:01 GMT; path=/,userid=0; expires=Tue, 22-Apr-2008 17:57:01 GMT; path=/,ClientKey=933ffb09-5096-4fbb-b90f-5f0bff335b41; path=/

2)该页面返回的HTML中有一个<input type="hidden" name="ClientKey" value="a50b14fa-2a75-4364-bbeb-3b498b72aa46" />这个值在登录提交时也需要,所以需要从HTML代码中分离出来。

3)将该SessionID作为Cookie的内容发送到验证码生成的页面http://passport.csdn.net/ShowExPwd.aspx 该页面将返回一个图片的二进制流。

4)将返回的二进制流转换为图片并呈现给用户。

Image img = new Bitmap(
          Http.GetStreamByBytes(
"http://passport.csdn.net" , "http://passport.csdn.net/ShowExPwd.aspx", b,
                                aspcookie, 
out header));//获得验证码图片
this.pictureBox1.Image = img;

 

5)用户输入用户名、密码和验证码,然后和同前面分离出的ClientKey按如下的格式POST到http://passport.csdn.net/UserLogin.aspx进行验证。

__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE4NDgzMDI2NjcPFgIeCkZpbmlzaFN0YXloFgJmD2QWBAIBDxYCHgRUZXh0BQznlKjmiLfnmbvlvZVkAgIPZBYCAgMPZBYCAgEPFgIeB1Zpc2libGVoZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAgUeY3RsMDAkQ1BIX0NvbnRlbnQkY2JfU2F2ZVN0YXRlBR1jdGwwMCRDUEhfQ29udGVudCRJbWFnZV9Mb2dpbr5SL%2FGtMqVCJ%2FCh4jH%2FXp4DhlVU&ctl00%24CPH_Content%24tb_LoginNameOrLoginEmail=studyzy&ctl00%24CPH_Content%24tb_Password=123&ctl00%24CPH_Content%24tb_ExPwd=wgssj&ClientKey=a50b14fa-2a75-4364-bbeb-3b498b72aa46&ctl00%24CPH_Content%24cb_SaveState=on&from=http%3A%2F%2Fhi.csdn.net%2Fmy.html&MailParameters=&MailParameters=&ctl00%24CPH_Content%24Image_Login.x=26&ctl00%24CPH_Content%24Image_Login.y=11

6)验证成功的话将返回包含用户信息(发帖数、积分、博客排名等等)的HTML,验证失败将返回具体的错误信息。

3.以上将CSDN的登录原理分析清楚了,那么接下来就是代码实现了,代码实现比较简单,我直接在上篇文章所使用的Demo代码上修改的,所以写的不是很漂亮,大家若有兴趣可以看看。/Files/studyzy/LoginCSDNDemo.rar
成功登录后如图:

image

现在当前用户已经成功登录了,那么接下来是要在CSDN上发表博客、论坛发帖只需要将当前的SessionID放入Cookie中,在提交时使用该Cookie即可。

转载于:https://www.cnblogs.com/Ewin/archive/2008/05/08/1189034.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_758182.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频网站?电子商务?

从两个不同行业的网站&#xff08;视频分享、电子商务&#xff09;&#xff0c;看互联网业务平台的特征&#xff1a; 1. 两者的核心都是内容。一个是视频&#xff0c;它的特性是&#xff1a;信息载体、数字化&#xff1b;另一个是商品&#xff0c;它的特性是&#xff1a;…

Step by Step WebMatrix网站开发之二:使用WebMatrix(1)

第一次运行WebMatrix会看到如图1所示的窗口。 图1 第一次运行WebMatrix显示的窗口 我的网站 进入“我的网站”可看到自己设计过的网站。 从Web库创建网站 可以从“从Web库创建网站“中理由网络上开源的网站系统创建网站&#xff0c;如名气比较响的WordPress、phpwind等…

60款高质量的网站模板免费下载(上篇)

您可能还喜欢 分享45款高质量的免费(X)HTML/CSS模板最新30佳精美 PSD 网站模板免费下载寻找网页设计灵感的27个最佳网站推荐60佳灵感来自大自然的网页设计作品欣赏分享100佳精美的作品集网站设计案例当你想快速制作出一个网站的时候&#xff0c;网站模板就非常有用了。学习网页…

java 学习网站_JAVA程序员学习必备十大网站

作为开发者来说&#xff0c;必备的除了对编码的热情还要有自己的一套技巧&#xff0c;另外不可缺少的就是平时学习的网站。以下本人收集的 Java 开发者必备的网站&#xff0c;这些网站可以提供信息、以及一些很棒的讲座 , 还能解答一般问题、面试问题等&#xff0c;或许你会认为…

linux测试网页装载时间,如何使用curl命令测试网站加载速度

Curl命令是一种用于通过各种协议传输数据的工具。有了它&#xff0c;我们就可以非常准确的知道网站的加载时间。使用此命令&#xff0c;我们可以看到&#xff1a;请求收到响应之前的总时间(time_namelookup)TCP协议在远程服务器上完成的总时间(time_connect)文件传输开始的时间…

网站使用QQ登陆

上几天我朋友说他知道怎么实现网站使用QQ号登陆或者注册了&#xff0c;于是要他发给我学习&#xff0c;感觉好复杂&#xff0c;而且运行不了&#xff08;主要万原因是因为这东西得上传到空间是实验&#xff09;&#xff0c;于是在博客园找了相关的资料&#xff0c;发现在也并不…

腾讯天堂最新服务器,天堂官方网站-腾讯游戏

亲爱的玩家&#xff1a;我们感谢您&#xff0c;成为了《天堂》世界的勇士&#xff1b;我们感谢您&#xff0c;伴随《天堂》十年&#xff0c;不离不弃&#xff1b;我们更感谢您&#xff0c;给我们如此多的批评建议&#xff0c;一切皆因您真心热爱这个游戏。而面对如此热爱《天堂…

测试网站速度的五个免费在线工具

如果你认为一个网站建成后&#xff0c;工作就已经完成&#xff0c;你就大错特错了。你需要不断监测其可用性和可访问性&#xff0c;一个小问题&#xff0c;可能毁了一切。而网页载入速度对于一 个网站来讲至关重要&#xff0c;试想一下&#xff0c;你喜欢进一个需要很长时间才载…

MSDN全球网站大改版

MSDN全球网站大改版如果你现在登录http://msdn.microsoft.com 的话&#xff0c;你会发现发现一个非常重大的改变&#xff1b;微软对MSDN进行了有史以来最大规模的一次改版。记得2周前曾经和MSDN国际化开发团队的负责人Brad聊了一下新版的msdn&#xff0c;当时他介绍了很多新版M…

自定义app_offline.htm,让网站升级提示更专业

用 VS2005 发布新网站时&#xff0c;VS会自动上传个 app_offline.htm 到网站上。这时&#xff0c;所有的网站连接都成为如下图所示:提示信息对开发者来说&#xff0c;有点用处。但是&#xff0c;对于正在访问中用户来说&#xff0c;实在是蹩脚。那么&#xff0c;如何让升级的时…

分享7个我常去的国外AjaxJquery网站

经常逛这些国外的网站&#xff0c;看到很不错的控件和Jquery的演示DEMO:今天拿出来和大家分享一番: Ajax Rain&#xff1a;http://www.ajaxrain.com/ AjaxRain有很多完美整合AJAX, CSS, DHTML 或 Javascript的实例&#xff0c;有一些Demo的确值得你去看一看 Ajax Daddy:http://…

大型网站技术架构(一)--大型网站架构演化

转自&#xff1a;https://blog.csdn.net/chaofanwei/article/details/26865169 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向…

服务器里面增加单页网站,如何设计完美的单页网站

原标题&#xff1a;如何设计完美的单页网站单页设计&#xff0c;是一项处理小型网站的绝佳技巧&#xff0c;甚至有些网站你可能认为一张页面搞不定&#xff0c;也同样适用。从易于维护&#xff0c;到减少带宽占用&#xff0c;使用单页网站的好处不胜枚举。假如你应对的是个小型…

优化网站设计(十一):避免重定向

前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过&#xff0c;我在不同的场合也分享过这样的话题。 作为通用的原则&#xff0c;雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考 Best Practices f…

零基础学习GitHub桌面版-6使用pages创建网站

文章目录0 使用pages创建网站1 Git和GitHub的相关内容&#xff08;略&#xff09;1.1开启gh-pages功能2 fork现成的blog2.1选择你喜欢的风格2.2 fork项目3 发布新博文0 使用pages创建网站 折腾了几天&#xff0c;尝试用github来搭建自己的个人博客&#xff0c;一直没有找到好的…

零基础学习GitHub桌面版-7使用Hexo建站并更换主题

文章目录0什么是 Hexo&#xff1f;1 安装Hexo1.1安装前提1.2安装 Git&#xff1a;1.3安装 Node.js1.4安装 Hexo1.5 遇到的问题2建站2.1简单的配置3发布4 HEXO主题4.1 安装主题4.2更新0什么是 Hexo&#xff1f; Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&…

vs2010如何发布web网站

一、新建网站根目录 D:\Release\WMS 二、新建网站站点 2.1、添加应用程序池 2.2、添加网站 三、vs发布 右键web程序&#xff0c;点击发布到本地&#xff0c;配置如下&#xff1a; 查看IIS&#xff0c;刷新建好的WMS网站 四、浏览 转载于:https://www.cnblogs.com/raowenbin/p/4…

谈谈以前端角度出发做好SEO需要考虑什么?

这里是修真院前端小课堂&#xff0c;每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能&#xff0c;本篇分享的是&#xff1a; 【谈谈以前端角度出发做好SEO需要考虑什么&…

从前端出发做好SEO需要考虑什么

这里是修真院前端小课堂&#xff0c;本篇分析的主题是 【从前端出发做好SEO需要考虑什么】 每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能&#xff0c;本篇分享的是&…

关于大型网站技术演进的思考(十四)--网站静态化处理—前后端分离—上(6)...

前文讲到了CSI技术&#xff0c;这就说明网站静态化技术的讲述已经推进到了浏览器端了即真正到了web前端的范畴了&#xff0c;而时下web前端技术的前沿之一就是前后端分离技术了&#xff0c;那么在这里网站静态化技术和前后端分离技术产生了交集&#xff0c;所以今天我将讨论下前…