验证码技术在网站中的应用

news/2024/5/12 6:49:45/文章来源:https://blog.csdn.net/xdfwsl/article/details/1074592
验证码应用目的:
  
为了防止某些别有用心的用户利用机器人(恶意程序)自动注册、自动登录、恶意灌水、恶意增加数据库访问、用特定程序暴力破解密码,可采用验证码技术。
  另外一个好处是,使得你的网站给人一种很酷的感觉。
  
  验证码应用原理:
  浏览器应用HTML标准与网站服务器动态联系,在HTML的表单中,基本上都是使用指定有Action的POST方法。如果不应用验证码方法,将很容易被一些别有用心的人利用机器人程序或者盗用Action的恶意程序,实现其个人勾当。应用验证码技术后,可以保护你的服务器,防止这一问题的发生。
  应用验证码技术后,表单上将多出一个验证码文本框输入项目,并且表单上的某个位置还显示有一个图片,这个图片是由一些可由人工识读的数字和字符组成的。这是应用验证码技术后的前台特征。后台特征是,服务器在生成验证码图片的时候,以Session或者其它方式在服务器端保存验证码的明文字符串。
  用户在输入表单内容的时候,还要求用户识读表单上的这个的验证码图片并将识读结果输入到验证码文本框内。当服务器收到这样的表单后,首先将用户提交的验证码与Session值进行比较,根据比较结果判断用户是否为合法使用网站功能。
  
  验证码应用注意事项:
  为了防止电脑OCR读图程序识别和破解验证码,一般需要在合理范围内适当增加对验证码图片的识别难度。处理手段主要是对色彩、形状、干扰元素、位置进行变异处理,使得生成的验证码图片不具有程序阅读的规律性。目前常用方法有:数字和字母混合、随机产生字符个数、随机扭曲翻转字符、随机增加背景噪点、随机添加干扰条纹、随机变化字符在图片上的位置、随机变化背景颜色和字符颜色、随机变化字符大小、随机变化字符间距,等等。在增加识别难度上需要掌握好度。如果用户太难识别验证码了,会影响用户对网站的使用积极性。
  网站应用验证码后,将增大服务器压力,具体表现在两个方面。一是因为生成验证码时使用了许多的算法,生成验证码过程中会占用服务器CPU时间,二是应用Session会消耗服务器内存。所以,并不是在网站中到处都用。目前主要是在重要表单提交时使用。
  服务器生成的验证码明文不能保存在客户端浏览器上,否则被用户读取后就失去了验证的作用。
  验证码技术,对传统的HTML标准的表单是具有显著防护作用的。在ASP.NET和其它技术飞速发展的今天,可以通过许多其他的方法达到同样的目的。如ASP.NET就应用了全新的Form技术,摒弃了Form的Action,对表单上的按钮Handles事件,通过该事件的服务器程序处理表单动作。再譬如。分步骤提交表单也可达到保护目的。所以说,验证码技术将很快退出历史舞台。
  
  
验证码式样:
  
本文示例程序可提供的式样及可实现的功能:
  标准式样:
  背景颜色随机变化:
  干扰线条随机变化:
  干扰噪点随机变化:
  扭曲程度随机变化:
  首字符位置随机变化:
  随机增加3D阴影:
  字符数量随机变化:
  字体大小随机变化:
  
  Yahoo验证码式样:
  
  
  CSDN验证码式样:
  
  
  Sina验证码式样:
  
  
  凤凰网验证码式样:
  
  
  
验证码生成方法:
  
1、随机产生一定长度的字符;
  2、使用System.Drawing命名空间的Graphics类的方法将字符绘制成图片;
  3、在第二步的基础上,使用各种方法对图片进行各种操作,使之复杂化,增加识别难度。
  
  
验证码应用前台程序:
  
以下是代码片段:
  <body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Image ID="Image1" runat="server" ImageUrl="VerifyChar.aspx" /><br />
    <br />
    <asp:Button ID="Button1" runat="server" Text="提交" /></div>
    </form>
  </body>
程序的核心是,将图片引用的URL指向验证码图片生成程序。
  
  验证码图片生成程序:
  以下程序在VS2003和VS2005下通过。
  
以下是代码片段:
  

  Imports System.IO
  Imports System.Drawing
  Imports System.Drawing.Imaging
  Imports System.Drawing.Drawing2D

  Partial Class VerifyChar
    Inherits System.Web.UI.Page

    Private Const PI As Double = 3.14159265358979
    Private Const PI2 As Double = 6.28318530717959

  
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache) ’不缓存
    Dim x, y, x1, y1 As Single
    Dim PenWidth1, PenWidth2, VerifyVharFont As Integer
    Dim VerifyChar As String = RndChar(4) ’RndChar是一个自定义函数
    Dim Img As System.Drawing.Bitmap
    Dim g As Graphics
    Dim backBrush As Brush = Brushes.DimGray
    Dim textBrush As Brush = Brushes.Black
    VerifyVharFont = Int(7 * Rnd()) + 14  ’验证码字符字体大小随机生成
    Dim textFont As New Font("Arial", VerifyVharFont, FontStyle.Strikeout)  ’验证码字体
    Dim ms As MemoryStream
    Dim gWidth As Integer = Int(Len(VerifyChar)) * VerifyVharFont + VerifyVharFont  ’验证区宽度。如果字符都为W,不加宽是不行的
    Img = New Bitmap(gWidth, 30)  ’验证区高度

    ’生成随机背景颜色
    Dim nRed, nGreen, nBlue As Integer ’ 背景的三元色
    Dim rd = New Random  ’(CInt(System.DateTime.Now.Ticks))
    nRed = rd.Next(255) Mod 128 + 128
    nGreen = rd.Next(255) Mod 128 + 128
    nBlue = rd.Next(255) Mod 128 + 128

    ’在图片框picCanvas上面建立一个新的空白Graphics
    g = Graphics.FromImage(Img)

    ’填充位图背景
    g.FillRectangle(New SolidBrush(System.Drawing.Color.FromArgb(nRed, nGreen, nBlue)), 0, 0, Img.Width, Img.Height)

    ’随机输出噪音线
    Dim i As Int32
    For i = 0 To 2
    Randomize()
    x = Img.Width * Rnd()
    y = Img.Height * Rnd()
    x1 = Img.Width * Rnd()
    y1 = Img.Height * Rnd()
    PenWidth1 = 2 * Rnd() ’修改参数可获得不同的效果
    g.DrawLine(New Pen(backBrush, PenWidth1), x, y, x1, y1)
    Next

    ’随机输出噪点
    PenWidth2 = 2 ’修改参数可获得不同的效果
    For i = 0 To 10
    Randomize()
    x = Img.Width * Rnd()
    y = Img.Height * Rnd()
    nRed = rd.Next(255) Mod 128 + 128
    nGreen = rd.Next(255) Mod 128 + 128
    nBlue = rd.Next(255) Mod 128 + 128
    g.DrawRectangle(New Pen(Color.FromArgb(nRed, nGreen, nBlue), PenWidth2), x, y, 1, 1)
    Next

    ’文字的位置
    x = 16 * Rnd() - 6 ’随机产生X轴位置,增加程序识别难度
    y = 0

    ’随机画3D背景
    Dim S3d As Single = Rnd()
    If S3d > 0.9 Then
    For i = 1 To 0 Step -1
    g.DrawString(VerifyChar, textFont, backBrush, x - i, y + i)
    Next
    End If

    ’将全局变换平移(x, y),也就是使画布上将要画的所有内容向左边移动x,向下移动y
    g.TranslateTransform(1.5, 1)

    ’做切变,将原始矩形的下边缘水平移动矩形高度的0.2倍
    Dim textTransform As Matrix = g.Transform
    textTransform.Shear(0.2, 0)
    g.Transform = textTransform

    ’画出文字
    g.DrawString(VerifyChar, textFont, textBrush, x, y)
    Me.Session("VerifyChar") = VerifyChar ’将验证字符写入Session,供前台调用

    ’扭曲验证字符。TwistImage参数可自行修改
    Dim Twist1, Twist2 As Single
    If S3d > 0.9 Then  ’3D背景减少扭曲
    Twist1 = 0
    Twist2 = 0
    Else
    Twist1 = Rnd() * 3  ’扭曲参数随机生成
    Twist2 = Rnd() * 2  ’扭曲参数随机生成
    End If
    Img = TwistImage(Img, True, -Twist1, -Twist2)
    Img = TwistImage(Img, False, Twist1, Twist2) ’多扭曲几次也没关系,只是消耗服务器资源多些

    ms = New MemoryStream
    Img.Save(ms, ImageFormat.Png)
    Response.ClearContent() ’需要输出图象信息 要修改HTTP头
    Response.ContentType = "image/Png"
    Response.BinaryWrite(ms.ToArray())
    g.Dispose()
    Img.Dispose()
    Response.End()

    End Sub

  
    ’函数名称:RndChar
    ’函数参数:VcodeNum--设定返回随机字符串的位数
    ’函数功能:产生指定长度的由数字和字符组成的随机字符串
    Function RndChar(ByVal VcodeNum) As String
    Dim Vchar As String = "3,3,5,5,6,6,7,7,9,9,A,C,E,F,G,H,K,L,M,N,P,R,T,X,Y,Z" ’定义验证码字符及出现频次
    Dim VcArray() As String = Split(Vchar, ",") ’将字符串生成数组
    Vchar = ""
    Dim i As Byte
    For i = 0 To Int(VcodeNum * Rnd()) + 1  ’确保最少2个字符,最多VcodeNum+1个字符
    Randomize()
    Vchar = Vchar & VcArray(Int(25 * Rnd())) ’数组一般从0开始读取,所以这里为25*Rnd
    Next
    Return Vchar
    End Function

  
    ’函数名称:TwistImage
    ’函数参数: dMultValue-波形的幅度倍数;dPhase波形的起始相位,取值区间[0-2*PI);bXDir-扭曲方式
    ’函数功能:正弦曲线Wave扭曲图片。函数可以迭加使用,以获得不同方式不同程度的效果
    ’这个天才的函数,已经无法考证出处了。感谢原作者!
    Public Function TwistImage(ByVal srcBmp As Bitmap, ByVal bXDir As Boolean, ByVal dMultValue As Double, ByVal dPhase As Double) As Bitmap
    Dim destBmp = New Bitmap(srcBmp.Width, srcBmp.Height)
    Dim dBaseAxisLen As Double = IIf(bXDir, CDbl(destBmp.Height), CDbl(destBmp.Width)) ’ToDo: Unsupported feature: conditional (?) operator.

    Dim i As Integer
    For i = 0 To destBmp.Width - 1
    Dim j As Integer
    For j = 0 To destBmp.Height - 1
    Dim dx As Double = 0
    dx = IIf(bXDir, PI2 * CDbl(j) / dBaseAxisLen, PI2 * CDbl(i) / dBaseAxisLen) ’ToDo: Unsupported feature: conditional (?) operator.
    dx += dPhase
    Dim dy As Double = Math.Sin(dx)

    ’ 取得当前点的颜色
    Dim nOldX As Integer = 0
    Dim nOldY As Integer = 0
    nOldX = IIf(bXDir, i + CInt(dy * dMultValue), i) ’ToDo: Unsupported feature: conditional (?) operator.
    nOldY = IIf(bXDir, j, j + CInt(dy * dMultValue)) ’ToDo: Unsupported feature: conditional (?) operator.

    Dim color As System.Drawing.Color = srcBmp.GetPixel(i, j)
    If nOldX >= 0 And nOldX < destBmp.Width And nOldY >= 0 And nOldY < destBmp.Height Then
    destBmp.SetPixel(nOldX, nOldY, color)
    End If
    Next j
    Next i

    Return destBmp
    End Function
  End Class

  以上程序,参考了互联网资源。在此向原作者鸣谢 

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

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

相关文章

自制翻页型爬虫(思路适用很多网站)

文章目录 BULLSHIT翻页网页源代码思路代码示例 BULLSHIT 非“数据科学家”&#xff08;挺烦别人自称数据科学家的&#xff0c;分析师就分析师&#xff0c;哪来这么多科学家&#xff09;的我&#xff0c;还得负责数据这块&#xff0c;好辛苦。? 对我来说爬虫是玄学&#xff0…

自制瀑布流型爬虫(思路适用很多网站)

文章目录 BULLSHIT翻页网页源代码代码示例 BULLSHIT 之前误打误撞写过一篇《自制翻页型爬虫&#xff08;思路适用很多网站&#xff09;》&#xff0c;最近遇到瀑布流型的网站&#xff0c;于是继续整理一下有关瀑布流型网站的爬虫思路。 举例网站&#xff1a;http://www.dunkh…

做BTC合约交易,发现了免费的宝藏数据网站!

做过合约都知道&#xff0c;大部分时间在堵&#xff0c;但是当了这么久的韭菜&#xff0c;总要提升胜率吧&#xff0c;既然没那个能力去拿到各种项目方的小道消息&#xff0c;那跟着大佬开单总没错吧&#xff0c;大佬吃肉我喝点汤就行。 有了这个思路&#xff0c;我就特别关注…

python爬虫学习之路(1)_ CSDN网站的模拟登陆

初入爬虫的道路&#xff0c;找到了一篇好的指导文章&#xff0c;先在此献上,内部讲述了入门开始的每一步&#xff0c;个人是比较推荐的&#xff01;&#xff01;&#xff01; 链接&#xff1a;https://zhuanlan.zhihu.com/p/21479334 &#xff08;我跳过了python 2.7 基础知识…

多元宇宙算法求解多目标优化问题附matlab代码(Multi-VerseOptimizer,MVO)

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

108lan.com网站部署(记录一次误使用rm -rf /*)

今天误使用了rm -rf/*把网站的部署的东西全部删除了 还好有网站的源文件备份 但是网站的一些图片没有备份导致以前上传的图片文件访问不了 以前都把这个错误当玩笑看&#xff0c;唉&#xff0c;没想到有一天自己会误敲这个命令 jar包和前端静态文件都还在 下面来部署网站&…

志远电脑公司网站系统

志远电脑公司网站系统&#xff0c;是一套专门从事电脑维修&#xff0c;打印机维修&#xff0c;安装监控&#xff0c;手机维修等业务的公司&#xff0c;或电脑店开发的一套成品网站程序&#xff0c;用户可以通过使用志远电脑公司网站系统快速搭建一个自己的网站&#xff0c;这一…

网站头像: favicon.ico

很多人问过我&#xff1a;你的网站在地址栏中的那个图标是怎么弄出来的&#xff1f; 这个文件就是在WEB根目录下的favicon.ico文件&#xff1a; http://www.example.com/favicon.ico 很多门户网站都有这个文件。 我觉得它的作用和MSN中的人物头像类似&#xff0c;可以称作“网站…

利用StatViz生成网站用户点击路径图

今天尝试了一下StatViz&#xff0c;生成了自己网站的点击路径统计&#xff1a;网站好“扁平”啊&#xff1b; 图较大&#xff0c;点击这里下载 具体的安装过程如下&#xff1a;下载GraphViz&#xff1a; 一个通用的矢量图生成工具 下载StatViz&#xff1a; 一个基于Web日志生成…

基于群体分析发现网站的相关性

今天看&#xff1a; 其中谈到了Amazon的a9.com中的搜索历史等功能对于用户的帮助。忽然想到Google的搜索结果页上有一个不怎么常用的相关网站功能&#xff1a;其实是一个很有用“发现”的功能&#xff0c;这种发现完全是不基于“字面”的&#xff0c;我感觉是经常看当前网网站的…

给Blog加上雅虎通PingMe服务:和网站用户即时聊天

雅虎中国刚刚发布了Y!Pingme服务&#xff0c;什么是PingMe呢&#xff1f; 就是一个web界面的雅虎通留言簿&#xff0c;没有注册过雅虎帐号的用户只要点击网站上的PingMe图标 <img src"http://opi.yahoo.com/online?uchedong&amp;t1&amp;lcn" alt"ca…

各种社交网站的入口dashboard比较

作者&#xff1a;车东 发表于&#xff1a;2008-02-24 14:02 最后更新于&#xff1a;2008-02-24 02:02版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明。http://www.chedong.com/blog/archives/001414.html “找到…

网站服务以及部署网站论坛discuz与网络论坛WordPress

网站架构 LAMP LinuxApacheMySQLPHP 系统服务器程序数据管理软件中间软件 静态网站&#xff1a;Apache&#xff1a;服务端口&#xff1a;80/tcp(http)443/tcp(https) 1.主配置文件 /etc/httpd/conf/httpd.conf 子配置文件&#xff1a;/etc/httpd/conf.d/*.conf 主目录&am…

网站高并发解决方案LVS

目录 负载均衡 一.集群功能分类 1.LB load balance 2.HA high available 二.负载均衡 1.负载均衡的主要方式 2.四层负载和七层负载 三.LVS概述 四.LVS工作模式 NAT转发模式 DR直接路由模式 TUN-IP隧道模式 ***模式对比&#xff1a; *轮训算法 1.Fixed Scheduling…

phpstudy安装ssl证书_浅谈网站SSL证书安装的重要性

网站需要安装SSL证书吗&#xff1f;为什么需要安装SSL证书&#xff1f;近年来&#xff0c;网络安全事件层出不穷&#xff0c;屡禁不止。据统计仍有57%的网站未进行https加密&#xff0c;成为数据泄漏的“导火索”之一。而SSL证书不仅仅可以保护网站数据安全&#xff0c;而且可以…

HTML5 网站大观:15个清爽简约风格的 HTML5 网站作品

本期的 HTML5 网站大观与大家分享15个精美的 HTML5 清爽简约风格网站。HTML5 是现在Web开发领域的热点&#xff0c;越来越多的开发人员开始使用 HTML5 来开发交互性强、效果出众的Web应用和游戏。希望这些制作精美的 HTML5 网站实例能帮助大家更好的学习 HTML5 网站制作。 Nao…

寻找网页设计灵感的27个最佳网站推荐

今天&#xff0c;本文要向大家推荐的是27个寻找网页设计灵感的最佳网站。设计师们可通过这些网站收集的优秀网页设计作品来获取灵感&#xff0c;进而设计出更加时尚、更有创意的作品。如果你有收藏这个列表中遗漏的网站&#xff0c;欢迎在评论中与大家分享。 CSS Nature Desig…

分享25个很棒的网页设计教程和资源网站

如果你是一个初学者&#xff0c;你想找高质量的设计资源和高品质的网页设计教程&#xff0c;可以看看本文列出的25个很棒的网页设计教程和资源网站&#xff0c;如果你是高手&#xff0c;也可以把自己制作的设计教程发布到这些网站上&#xff0c;这样更多人能够从你的教程学到东…

分享30个最新的单页网站设计案例

单页网站是指只有一个页面的网站&#xff0c;这种形式的网站曾经非常流行&#xff0c;现在依然有很多人喜欢。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站&#xff0…

分享25佳 iPad 应用程序的网站设计案例

苹果的东西太招人喜欢了&#xff0c;iPad 2在国内还未上市&#xff0c;江湖传闻有中国“黄牛”提编织袋在美国抢购 iPad 2&#xff0c;不知是真是假。不过我们今天不讨论这个&#xff0c;我们说点别的&#xff0c;有的人称iPad为平板电脑&#xff0c;有的人说不对&#xff0c;应…