给ASP.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

 

  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论
<p class="MsoNormal" style="margin: 5pt 0pt; text-indent: 0pt;"><span style="font-family: 微软雅黑; color: #333333; letter-spacing: 0pt; font-size: 16pt; background: #ffffff;"><span style="font-family: 微软雅黑;">这门课程</span></span><span style="font-family: 微软雅黑; color: #333333; letter-spacing: 0pt; font-size: 16pt; background: #ffffff;"><span style="font-family: 微软雅黑;">2021年10月录制,开发工具使用VS2019,</span></span><span style="font-family: 微软雅黑; color: #333333; letter-spacing: 0pt; font-size: 15pt; background: #ffffff;"><span style="font-family: 微软雅黑;">主要是针对软件行业新人的,适合在校大学生、准备转行的新人、软件公司新入职员工。这门课程主要讲解</span><span style="font-family: 微软雅黑;">ASP.Net Web Form开发的基础知识,全是干货,是我们学习ASP.Net MVC开发和前后端分离架构开发的基础。这门课程里面讲的都是我们要经常使用的技术,对于开发过程中几年都用不到的技术点,这里不讲,因为即使讲了,过段时间也就忘了,大家时间都比较宝贵。对于初学者,最重要的是打好基础,能够轻松快速的入门,不用花太多时间去研究偏离主线细枝末节的一些技术点。一些不常用的技术点,我们在工作中遇到了,再去百度、CSDN查就可以了。</span></span><span style="font-family: 微软雅黑; color: #333333; letter-spacing: 0pt; font-size: 10.5pt; background: #ffffff;"><br /></span><span style="font-family: 微软雅黑; color: #333333; letter-spacing: 0pt; font-size: 10.5pt; background: #ffffff;"><br /></span><span style="font-family: 微软雅黑; color: #333333; letter-spacing: 0pt; font-size: 10.5pt; background: #ffffff;"><br /></span><span style="font-family: 微软雅黑; color: #333333; letter-spacing: 0pt; font-size: 15pt; background: #ffffff;"><span style="font-family: 微软雅黑;">大壮老师课程推荐:</span></span></p> <h3 style="text-indent: 0.0000pt; padding: 0pt 0pt 0pt 0pt; mso-pagination: widow-orphan; line-height: 36.0000pt; background: #ffffff; margin: 12.0000pt 0.0000pt 0.0000pt 0.0000pt;"><span style="font-family: 仿宋; color: #e03e2d; letter-spacing: 0pt; font-weight: normal; font-size: 16pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">计算机软件行业入门指导视频教程</span></h3> <p class="MsoNormal" style="margin: 0pt; text-indent: 0pt; padding: 0pt; background: #ffffff;"><span style="font-family: 仿宋; letter-spacing: 0pt; font-size: 13.5pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">https://edu.csdn.net/course/detail/30919</span></p> <h3 style="text-indent: 0.0000pt; padding: 0pt 0pt 0pt 0pt; mso-pagination: widow-orphan; line-height: 36.0000pt; background: #ffffff; margin: 12.0000pt 0.0000pt 0.0000pt 0.0000pt;"><span style="font-family: 仿宋; color: #e03e2d; letter-spacing: 0pt; font-weight: normal; font-size: 16pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">HTML、CSS零基础Web开发快速入门视频教程</span></h3> <h3 style="margin-left: 0.0000pt; text-indent: 0.0000pt; mso-pagination: widow-orphan;"><span style="font-family: 仿宋; letter-spacing: 0pt; font-weight: normal; font-size: 13.5pt;">https://edu.csdn.net/course/detail/32711</span></h3> <h3 style="text-indent: 0.0000pt; padding: 0pt 0pt 0pt 0pt; mso-pagination: widow-orphan; line-height: 36.0000pt; background: #ffffff; margin: 12.0000pt 0.0000pt 0.0000pt 0.0000pt;"><span style="font-family: 仿宋; color: #e03e2d; letter-spacing: 0pt; font-weight: normal; font-size: 16pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">JavaScript基础快速入门视频教程</span></h3> <h3 style="margin-left: 0.0000pt; text-indent: 0.0000pt; mso-pagination: widow-orphan;"><span style="font-family: 仿宋; letter-spacing: 0pt; font-weight: normal; font-size: 13.5pt;">https://edu.csdn.net/course/detail/32172</span></h3> <h1 style="text-indent: 0.0000pt; padding: 0pt 0pt 0pt 0pt; mso-pagination: widow-orphan; line-height: 36.0000pt; background: #ffffff; margin: 12.0000pt 0.0000pt 0.0000pt 0.0000pt;"><span style="font-family: 仿宋; color: #e03e2d; letter-spacing: 0pt; font-weight: normal; font-size: 18pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">MySQL8.0数据库基础入门视频教程</span></h1> <p class="MsoNormal" style="margin: 0pt; text-indent: 0pt; padding: 0pt; background: #ffffff;"><span style="font-family: 仿宋; letter-spacing: 0pt; font-size: 13.5pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">https://edu.csdn.net/course/detail/31285</span></p> <h1 style="text-indent: 0.0000pt; padding: 0pt 0pt 0pt 0pt; mso-pagination: widow-orphan; line-height: 36.0000pt; background: #ffffff; margin: 12.0000pt 0.0000pt 0.0000pt 0.0000pt;"><span style="font-family: 仿宋; color: #e03e2d; letter-spacing: 0pt; font-weight: normal; font-size: 16pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">SQL Server 2019数据库基础入门视频教程</span></h1> <p class="MsoNormal" style="margin: 0pt; text-indent: 0pt; padding: 0pt; background: #ffffff;"><span style="font-family: 仿宋; letter-spacing: 0pt; font-size: 13.5pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">https://edu.csdn.net/course/detail/30444</span></p> <h1 style="text-indent: 0.0000pt; padding: 0pt 0pt 0pt 0pt; mso-pagination: widow-orphan; line-height: 36.0000pt; background: #ffffff; margin: 12.0000pt 0.0000pt 0.0000pt 0.0000pt;"><span style="font-family: 仿宋; color: #e03e2d; letter-spacing: 0pt; font-weight: normal; font-size: 16pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">Oracle 19c 数据库基础入门视频教程</span></h1> <p class="p" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; text-indent: 0.0000pt; mso-pagination: widow-orphan; margin: 5.0000pt 0.0000pt 5.0000pt 0.0000pt;"><span style="font-family: 仿宋; letter-spacing: 0pt; font-size: 13.5pt;">https://edu.csdn.net/course/detail/30903</span></p> <p class="MsoNormal"><span style="mso-spacerun: 'yes'; font-family: Calibri; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; font-size: 10.5000pt; mso-font-kerning: 1.0000pt;"> </span></p>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

shanhe

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值