`
yueue
  • 浏览: 50315 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

给ASP.Net表单增加验证码

    博客分类:
  • .NET
阅读更多

ASP.Net表单增加验证码

一、验证码

对于一个预防攻击的web表单来讲,验证码通常是一个常见的措施。因为如果对于一些public区域的页面内容来讲,譬如一个登录表单,如果没有必要的安全措施,很可能遭到模拟登录的暴力破解攻击,要么轻易获得特定账户的登录信息,要么给服务器增加了大量的负荷,影响正常的服务。解决的办法,一般就是在登录前给出一个随机的信息(验证码),显示在页面上,让用户填写,以确保用户是通过web页面来进行正常的登入,对于非法的非web途径登录者会看不到这个验证码从而拒绝其登录。虽然这样,往往很多攻击者会截获登录web页,从而也搜索出验证码,这样,验证保护措施也失去意义,一般情况下,我们可以通过将验证信息作为图像信息显示在web上,这样就既可以不阻碍合法用户登录,又使非法攻击者无法通过html搜索获得验证信息。这大抵上就是验证码的用途和意义了。

二、ASP.Net的验证码实现

一般传统的验证码图像一般采用一些CGIISAPI程序加上一些加密代码来动态生成图像,ASP大多采用COM组件实现,相当辛苦。

ASP.Net中欲实现动态验证码却相当容易,笔者大致的思路:

1、 了安全起见,一般存在于CGI程序的url中的验证码加密串最好不要出现在html表单中,而是采用session变量存储,这样验证码的校验会很容易。

2、 采用一个单独的aspx页面专门产生动态程序,要显示的图形验证码信息存在于session中,而一个系统中有可能存在多个表单,为满足整个系统要求可以在aspx后加一个确定的session key的名称,例如

<img src=”http://xxxx/Genimg/viewImg.aspx?sessionKeyName=abc”> 此处的abc就是登录页在第一次输出表单给客户端自动生成一个随机字符串存储在session中的key名称,在服务器端脚本中可以通过session(“abc”)获得生成的字符串(验证码)到底是多少,通过和用户在表单的验证码输入框中输入的内容比较来确定用户是否通过正常的ie浏览器来访问表单。

3、 在表单的第一次显示(get方法)时,生成一个随机数字符串,存入session(“abc”)中,同时将abc作为sessionKeyName的值加入到验证码图形显示生成程序viewImg.aspxurl串中。

4、 ViewImg.aspx分析sessionKeyName,获取session(“abc”)的具体值,利用GDI+产生内存图像,然后修改http header,按照content-type=images/png的格式输出二进制流,这样客户的浏览器会显示出一幅图像,图像表达的内容就是验证码。

5、 当用户填入验证码后,提交到表单验证程序,首先考察其中的验证码输入字段,发现不匹配session(“abc”)马上拒绝,甚至可以累计失败登录次数,乃至拒绝此IP连接,保护系统;匹配session中的存储值,可以进行进一步的其他处理(譬如登录处理,文章发表等),当然也注意销毁此session变量(如果以后不需要)。

6、 不同的表单,可以分配不同的session变量名,这样一个ViewImg.aspx可以为系统多个表单服务。

三、实例解说

重点列出viewImg.aspx吧,具体看清单:

Imports System.IO

Public Class viewImg

Inherits System.Web.UI.Page

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim img As Bitmap

Dim gdiobj As Graphics

Dim ms As MemoryStream "--内存流,存放动态图形内存印象

Dim vfycode As String "--验证码

Dim SessionKeyname As String

If (Request("SessionKeyName") <> "") Then

SessionKeyname = Request("SessionKeyName")

If (Session(SessionKeyname) <> "") Then

vfycode = Session(SessionKeyname)

Else

vfycode = ""

End If

img = New Bitmap(32, 16) "--这个宽高可以根据需要确定

gdiobj = Graphics.FromImage(img)

gdiobj.DrawString(vfycode, (New Font("Arial", 9)), (New SolidBrush(Color.Black)), 0, 0)

ms = New MemoryStream()

img.Save(ms, System.Drawing.Imaging.ImageFormat.Png) "--选择透明格式

Response.ClearContent() "--原本是准备输出html流,现在输出图信数据,所以要修改http头

Response.ContentType = "image/png"

Response.BinaryWrite(ms.ToArray())

Else

End If

Response.End() "--这个最好带上

End Sub

End Class

分享到:
评论

相关推荐

    asp.net知识库

    为 asp.net 2.0 的菜单控件增加 target 属性 ASP.NET 2.0 的内部变化 常见的 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几...

    ASP.NET MVC+EF6+Bootstrap开发C#源代码

    一套基于ASP.NET MVC+EF6+Bootstrap开发出来的框架源代码! 采用主流框架,容易上手,简单易学,学习成本低。可完全实现二次开发、基本满足80%项目需求。 可以帮助解决.NET项目70%的重复工作,让开发更多关注业务...

    ASP.NET Night Words

    第1章 asp.net介绍 2 1.1 xhtml语言 2 1.2 静态网页 3 1.3 动态网页 3 1.4 iis的安装和配置 3 1.5 asp.net开发的预备知识 4 1.5.1 asp.net简介 4 1.5.2 在iis上配置asp.net 4 1.5.3 visual studio版本与 ...

    动态生成验证码(c#,asp.net,可以使用)

    不少网站为了防止用户利用...所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。

    如鹏网2018 .NET高级开发班

    .Net提高班-asp.net mvc其他.pdf .Net提高班-docker.pdf .Net提高班-git.pdf( G; l. c1 b& u/ G1 F .Net提高班-IM项目.pdf1 ?" R, Q/ _& o& t/ K6 p: N .Net提高班-linux课件.pdf .Net提高班-MVC项目.pdf ...

    NRecaptcha2:reCAPTCHA v.2.0对ASP.NET Web窗体和ASP.NET MVC的支持

    NRecaptcha2介绍reCAPTCHA v.2.0对ASP.NET Web窗体和ASP.NET MVC的支持安装用法ASP.NET Web表单ASP.NET MVCASP.NET网页如何在页面上使用多用验证码?执照

    基于ASP.NET实现的网上书城项目源码+sql数据库+项目说明+演示视频.zip

    基于基于ASP.NET实现的网上书城项目源码+sql数据库+项目说明+演示视频.zip 演示视频为项目所有功能展示 sql文件为数据库文件 功能如下: # 一、登录注册功能 包含基础的登录与注册功能,同时支持表单验证与随机...

    Recaptcha2:用于 google recaptcha 2 的 asp.net mvc 5 小部件

    用于ASP.NET MVC 5 小部件 用法 在注册并获取站点密钥和秘密。 将站点密钥和秘密添加到 web.config 中: ... 将 Recaptcha2 类添加到您的 ASP.NET MVC 5 项目。 将 Recaptcha2 添加到您的表单视图中: ...

    ASP.NET Core中实现用户登录验证的最低配置示例代码

    最近工作中遇到一个需求,需要在ASP.NET Core中来实现一个基础的身份认证,下面这篇文章主要给大家介绍了关于ASP.NET Core中实现用户登录验证的最低配置的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。

    LoginVerify.rar

    asp.net 表单登录+样式+生成随机汉字验证码+验证登录,自己亲撸的代码,需要下载,如有问题欢迎来骚扰

    支持.Net和.Net Core的网站框架ZKWeb.zip

    可以大幅提升页面的响应速度IoC容器轻量且快速默认支持使用属性注册程序集中的类型到容器支持构造函数注入支持多个框架的托管支持托管在Asp.Net支持托管在Asp.Net Core支持托管在Owin插件不需要理会托管在哪个框架,...

    PoliteCaptcha:PoliteCaptcha是一个防垃圾邮件库,可与ASP.NET MVC一起使用,该库首先尝试礼貌地防止垃圾邮件,然后粗鲁地向用户提供CAPTCHA

    PoliteCaptcha是用于ASP.NET MVC 3表单的垃圾邮件阻止库。 强迫人们用难以阅读的图像来填写表格,因为我们不能把它们与恶意制作的计算机程序区分开来,这是不礼貌的。 PoliteCaptcha尝试先验证用户代理是否为真实的...

    ASP.net操作XML文件写入注册信息

    内容索引:.NET源码,其它类别,XML,文件操作 一个实用的小例子,将注册表单的信息提交写入XML文件,并读取这些数据,支持重复写入,进行重名验证等,程序使用了验证码和Wizard控件。新手朋友可以参考一下。

    C#实现表单提交(1) - 真功夫

    C#实现表单提交(1) - 真功夫

    NETSNS社交系统 v1.0 源码版.rar

    NetSNS是基于Asp.Net开发的社交网络互动web应用程序,整个产品采用先进的技术(SQL2000数据库,Ajax,Div CSS布局等诸多网络流行元素囊括其中),适合各方面应用的要求, 模板与程序分离,标签调用,支持DIV CSS,...

    JS获取短信验证码倒计时的实现代码

    主要介绍了JS获取短信验证码倒计时的实现代码,需要的朋友可以参考下

    仿世纪佳缘婚介交友系统5.3 ASP+SQL

    如果选择关闭,那么模板中所有相关的验证码表单都要手工去掉保存提交。  (10)服务升级设置: 这里可以设置升级VIP费用、明星榜费用、对认证会员打折设置等。包括人民币与金币汇率。 消费卡使用期限,即后台...

    Material-UI-Form-Design-and-Validation:重大的UI表单设计和验证

    完整的React Material UI教程-表单设计和验证这些是用于解释Material UI...物料用户界面-表单验证视频教程: : :bar_chart: 教程清单 :money_bag: 支持我们角度的 贝宝 Asp.Net核心 亚马逊会员 Reacthttp://bit.ly/3

    H5智能内核-基于MVC架构的全新Zoomla!逐浪CMS2 x3.8发布

    ASP.NET 支持三种不同的开发模式: Web Pages(Web 页面)、MVC(Model View Controller 模型-视图-控制器)、Web Forms(Web 窗体) MVC 编程模式 MVC 是三种 ASP.NET 编程模式中的一种。 MVC 是一种使用 MVC...

    NetCMS 网站内容管理系统 V1.5

    NetCMS一款基于微软ASP.NET技术的CMS。  NetCMS1.5版本是采用微软的ASP.NET2.0技术进行架构、功能强大的网站管理软件。系统包括内容采集、整理、分类、审核、发布和管理的全过程,具备完善的信息管理和发布管理...

Global site tag (gtag.js) - Google Analytics