`
kenby
  • 浏览: 724721 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cookie 实现验证码的原理

    博客分类:
  • web
 
阅读更多

验证码技术用来解决网络中的恶意注册或者 DDOS 攻击,主要原理是,让用户

输入图片中的文字,如果通过了验证,服务器就在客户端浏览器保存一个验证 cookie,

比如叫做 <secure_session, 9HcxOGJMhn5j7UpmguyA4ABD>

以后用户访问服务器其他页面的时候,服务器先获取这个 cookie, 如果存在,

说明验证通过, 不存在则让用户输入验证码。


事先制作验证码图片

服务器生成 n 张验证码图片,文件名就是验证码对应的字符串。比如 nBxY.jpg

服务器使用一个 map,用来保存 <index, code> 的序对,其中 index 从

1递增直到 n, code 是验证码字符串,也是图片的文件名。

<1, nBxy>

<2, aBed>

<3, iOlx>

......


服务器生成随机的验证码图片给用户

浏览器请求一个页面,服务器先检查浏览器是否有 secure_session 的 cookie,

如果没有,就让用户输入验证码,服务器就使用哈希的方法取一张验证码图片,

显示在浏览器,哈希方法的具体步骤是:

 

服务器根据访问时间和 ip 生成一个 md5,作为 key

key = md5(time, ip)

然后计算 key 的 hash值,对其取余,得到验证码图片的索引值

index = hash(key) % n

从服务器的 map 中查找索引值 index 对应的验证码图片,返回给浏览器

 

可见,key 可以确定一张验证码图片,后面一个步骤,需要把用户输入的验证码和

验证码图片对比,以判断用户输入是否正确,为了确定用户使用的是哪张图片,我们

把 key 值保存在浏览器,即把 <temp_session, key> 作为临时 cookie 保存在

浏览器上。


服务器如何验证

验证的时候,服务器从客户取得两个属性,一个是 key 值,可以通过 temp_session

取得,一个是用户输入的验证码。

key = get_cookie("temp_session")

code = request.getParameter("code")

服务器取 key 的目的是确认用户输入的是哪个验证码的图片,确认方法为:

根据 key 计算出索引值

index = hash(key) % n

从服务器的 map 中查找 index 对应的验证码,

然后拿这个验证码跟用户输入的验证码做比较,即可验证

是否合法。 如果合法就把正式的 cookie 保存在浏览器

分享到:
评论

相关推荐

    利用cookie实现asp.net(c#)验证码

    在这个场景下,我们将探讨如何结合Cookie和MD5哈希算法来实现一个简单的验证码系统。 首先,我们需要了解验证码的基本原理。验证码通常由一串随机生成的字符或数字组成,用户在提交表单时需要输入显示的验证码,...

    jquery实现验证码功能 完整代码

    jQuery,一个轻量级、高性能的JavaScript库,虽然主要处理DOM操作、事件处理和动画效果,但也可以通过扩展来实现验证码功能。本篇文章将深入探讨如何使用jQuery实现验证码功能,以及提供的完整代码。 首先,验证码...

    python实现带验证码网站的自动登陆实现代码

    Cookie的工作原理: Cookie由服务端生成,然后发送给浏览器,浏览器会将Cookie保存在某个目录下的文本文件中。在下次请求同一网站时,会发送该Cookie给服务器,这样服务器就知道该用户是否合法以及是否需要重新登录...

    javaWeb使用验证码实现简单登录

    实现验证码登录的步骤 1. 创建login.jsp页面,该页面将显示登录表单和验证码图片。 2. 客户端向服务器发送请求,服务器生成验证码图片并将其保存到Session中。 3. 客户端再次发送请求,服务器对比客户端提交的...

    验证码的实现方法-局部刷新

    首先,我们来了解一下验证码的基本原理。验证码通常由一串随机字符或数字组成,这些字符被扭曲、旋转或以其他方式变形,以增加机器识别的难度。用户需要正确输入显示的验证码才能完成特定操作,这样可以确保只有具备...

    MCV实现验证码(jquery无刷新)

    ### MCV实现验证码(JQuery无刷新) #### 概述 在现代Web开发中,验证码是一种常见的用户交互机制,用于防止自动程序进行恶意操作。本文将详细介绍如何在Microsoft的MVC框架中实现一种基于JQuery的无刷新验证码...

    阿里系cookie加密(acw-sc-v2)算法 ZIP包案例为雪球Cookie加密

    JavaScript代码可能包含了在前端处理cookie加密的逻辑,而Python代码则可能是后端服务器用于解密接收到的加密cookie的实现。 JavaScript部分的加密算法代码可能涉及到对原始cookie值的预处理、哈希计算、非对称加密...

    .net实现字符验证码

    为了实现验证码,我们需要编写代码来生成这种随机字符串,并将其显示在图像上。 1. **生成随机字符串**: 在.NET中,我们可以使用`System.Random`类来生成随机数字,再结合ASCII编码来生成字母和数字的组合。例如...

    验证码实现例子

    通过学习和理解这个验证码实现的例子,你可以了解到验证码的基本原理和实现方法,这对于开发自己的安全防护功能或深入理解Web应用的安全性都大有裨益。同时,这个例子也可以作为一个实践项目,帮助你提升编程技能和...

    Python爬虫实现验证码登录代码实例

    需要设置验证码登录,避免非人类的访问,Python爬虫实现验证码登录的原理则是先到登录页面将生成的验证码保存下来,然后人为输入后,包装后再POST给服务器,实现验证,这里还涉及到了Cookie,其实Cookie保存在本地...

    验证码的session问题

    在"WebApplication1"这个项目中,可能包含了实现验证码和Session管理的相关代码。开发者可以通过查看源码,了解如何生成和验证验证码,以及如何管理和存储Session数据。此外,也可以参考CSDN论坛上的讨论...

    vb 实现登录QQ空间.安全中心。验证码

    在VB(Visual Basic)编程环境下实现登录QQ空间和安全中心并处理验证码是一项涉及网络通信、网页交互以及图像处理的技术任务。下面将详细讲解这个过程涉及的主要知识点。 首先,要实现登录功能,我们需要理解HTTP...

    JAVA 验证码WEB应用

    总之,“JAVA 验证码WEB应用”是一个实现验证码功能的完整解决方案,它结合了Java图形处理、Web交互以及安全验证的原理。理解并运用这些知识点,开发者可以有效地保护自己的Web应用免受自动化攻击,提高用户体验。

    php破解验证码配套代码

    在某些实现中,服务器会将验证码值保存在Cookie中,以便在用户提交表单时进行验证。不过,这增加了安全风险,因为Cookie可以被第三方读取。因此,更安全的做法是使用Session,因为它在服务器端存储信息,不会暴露给...

    java 验证码 框架

    这通常通过Session或者Cookie实现,将验证码的值与用户的会话关联。 3. **验证逻辑**:当用户输入验证码后,系统需要验证用户输入的值是否与之前生成并存储的值匹配。如果不匹配,则拒绝用户的请求。 4. **API接口...

    Asp验证码[6位验证字符长度](带示例演示)

    1. ASP验证码的基本原理: ASP验证码的核心是生成一串随机的6位字符,这些字符可以是数字或字母,然后将其显示在图像上。生成的验证码值需要存储在服务器端,以便后续验证时与用户输入的值进行比较。通常有两种常见...

    ASP.NET验证码

    ASP.NET验证码是Web开发中一个重要的安全机制,用于防止自动化的机器人或恶意脚本进行非法操作,如批量注册、垃圾...理解和掌握验证码的工作原理以及如何在ASP.NET中实现和优化,对于开发安全的Web应用程序至关重要。

    jquery封装好的验证码

    2. **JavaScript代码**:这部分是关键,使用jQuery处理点击事件,实现验证码的刷新和验证功能。它会与服务器交互,请求新的验证码图片。 3. **服务器端逻辑**:生成随机验证码并存储在服务器的session或者cookie中,...

    Jquery ajax 获取验证码

    首先,理解验证码的生成原理。通常,服务器端会生成一串随机字符串,将其显示在图片上,同时将该字符串存储在会话(session)或cookie中,以便在用户提交表单时进行验证。这个过程可以通过各种算法实现,例如扭曲...

    java完美的验证码生成

    本教程将详细讲解如何在Java环境下实现一个完美的、可定制的验证码生成系统。 首先,验证码的基本原理是生成一串随机字符串,并将其与图像结合,用户在看到图像后需输入对应的字符串,服务器端会验证用户输入的字符...

Global site tag (gtag.js) - Google Analytics