传统图片验证算法的缺点及改进(原理篇)

    图片验证最常用在防恶意注册的场景,但传统图片验证方法的缺点在于需在服务器端维护这些随机生成的验证码字符串,所以实质上只是将恶意注册的影响从数据库转移到了内存,维护这个内存资源仍然会带来一些麻烦,包括定期清理,且仍要在一定程度上考虑防恶意获取验证码。

    下面介绍一种无需在服务器端维护验证码字符串的方法。

    我们假设服务器数据库用户表中的用户名字段的值必须是唯一的(这很常见),我们借助一个加密或者哈希算法,这样每个用户名对应的加密字符串在统计上也可以认为是唯一的。当新用户申请注册的时候,先提交这个用户名给服务器作有效性检查,如果数据库中没有这个用户名,则可注册,这时再用这个加密或者哈希算法将这个可用的用户名加密,返回这个加密的值的图像数据给客户端。(因为客户端不知道加密密钥,又不好破解加密算法,所以只能老老实实按图像值输入)

    随后客户端进入正式注册阶段,客户端将这个图像的对应字符串和刚才验证通过的用户名再次递交给服务器,服务器再次用同样的算法加密这个用户名,并将加密出的值和客户端传来的字符串相比较,如果相同,则向数据库提交注册。客户端也无法使用以前的验证数据来欺骗服务器,因为验证数据必须包含用户名,验证数据若有效则用户名必定已存在于数据库中,这样是不可能插入成功的。

    其实这个算法巧妙地借助了数据库某个字段值唯一性的特点,巧妙地复用了数据库的功能。

    优点:无需维护Session,对于服务器系统,越少维护这样的“全局变量”越利于减少出错几率。

    缺点:(可能,没测过,很有可能不是缺点)加密算法消耗的CPU时间要高于字典、hash算法(Session是需要通过字典或者hash算法获取数据的)

    只讲原理

转载于:https://www.cnblogs.com/WYB/archive/2008/07/01/1232785.html

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

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

相关文章

hive关于left join 和join时候on条件总结

hive中使用join时候on条件 1、如果 select * from a left join b on(a.字段b.字段) 工作正常 2、如果 select * from a left join b on(a.字段b.字段,b.字段某值,b.……) 工作正常 3、如果 select * from a left join b on(a.字段b.字段,a.字…

mybatis学习(35):sql-where

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

You get a dream...you gotta protect it.

Dont ever let somebody tell you...you cant do something. You get a dream...you gotta protect it. If you want something,go get it. MOVIE 《当幸福来敲门》 转载于:https://www.cnblogs.com/mtc/archive/2008/07/03/1235079.html

mybatis学习(36):动态sql-set

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

从10亿光年到0.1飞米的世界 (经典!震撼!)

从10亿光年到0.1飞米的世界! 10亿光年,是一个什么概念?光年:光走一年的路程.光速:每秒299792458米,一秒可绕地球7圈半.在10亿光年下观测的宇宙.上面的每一个象素点所表现的事物都是无比古远的.1亿光年.把视野缩小了10倍,宇宙看起来还是星光点点,1000万光年,把眼光再降低一个数…

高效、稳定开发功能的一些心得

在开始编码前一定要足够了解案子,了解各种特殊情况,和美术、策划、服务器沟通好,最后写好伪代码。 一些建议 1.尽量复用,例如重复的对象单独抽出来做成item,别的模块也用到的做成通用item,不要写重复代码。…

Flume与Kafka整合案例详解

环境配置 名称 版本 下载地址 Centos 7.0 64x 百度 Zookeeper 3.4.5 Flume 1.6.0 Kafka 2.1.0 flume笔记 直接贴配置文件 [rootzero239 kafka_2.10-0.10.1.1]# cat /opt/hadoop/apache-flume-1.6.0-bin/conf/kafka-conf.properties # The configuration file needs to …

mybatis学习(37):动态sql-trim

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

SQL-简单查询

/*人员:LDH功能:SQL-简单查询日期:2018-7-18*/USE TSQLFundamentals2008; GO-- Select some columns information. SELECT empid,lastname,firstname,address,city,country FROM HR.Employees;-- GROUP BY SELECT 国家 country,COUNT(1) AS …

mybatis学习(38):动态sql-foreach

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

hive 的条件判断(if、coalesce、case)

原文地址:http://www.folkstalk.com/2011/11/conditional-functions-in-hive.html CONDITIONAL FUNCTIONS IN HIVE Hive supports three types of conditional functions. These functions are listed below:IF( Test Condition, True Value, False Value ) The IF …

黑盒测试方法揭密

一、黑盒测试在快速应用开发(rad)环境中的重要作用软件测试方法一般分为两种:白盒测试与黑盒测试。其中,白盒测试又称为结构测试、逻辑驱动测试或基于程序本身的测试,着重于程序的内部结构及算法,通常不关心…

mybatis学习(39):动态sql片段

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

自定义Flume拦截器,并将收集的日志存储到Kafka中(案例)

1.引入POM文件 如果想调用Flume&#xff0c;需要引入flume相关的jar包依赖&#xff0c;jar包依赖如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://…

中国古代十三美男

一、潘安    潘岳&#xff0c;就是人所周知的潘安&#xff0c;西晋时河南人氏&#xff0c;表字安仁&#xff0c;小字檀奴。其人“姿容既好&#xff0c;神情亦佳”。潘岳年轻时&#xff0c;坐车到洛阳城外游玩&#xff0c;当时不少妙龄姑娘见了他&#xff0c;都会怦然心动给他…

名诗

一&#xff0c;《江城子》 苏轼十年生死两茫茫&#xff0c;不思量&#xff0c;自难忘。千里孤坟&#xff0c;无处话凄凉。纵使相逢应不识&#xff0c;尘满面&#xff0c;鬓如霜。夜来幽梦忽还乡&#xff0c;小轩窗&#xff0c;正梳妆。相顾无言&#xff0c;惟有泪千行。料得年年…

mybatis学习(40):逆向工程的创建

目录 首先导入我们的jar包 链接&#xff1a;https://pan.baidu.com/s/1Ent3kAwOagOZLT0XxDLEeA 提取码&#xff1a;zqpu 建立一个com.geyao.generator的包 generator的java类 package com.geyao.generator; import java.io.File; import java.util.*;import org.mybatis.ge…

SpringBoot中Tomcat配置(学习SpringBoot实战)

1、Tomcat配置 Spring Boot默认内嵌的Tomcat为Servlet容器&#xff0c;所以本节只讲对Tomcat配置&#xff0c;其实本节的配置对Tomcat、Jetty和Undertow都是通用的。 1.1 配置Tomcat 关于Tomcat的所有属性都在org.springframework.boot.autoconfigure.web.ServerProperties配…

axios的数据请求方式及跨域

express 的三大功能&#xff1a;静态资源、路由、模板引擎 app.use(express.static(www));  只要是创建这个静态的目录&#xff0c;这个 www 的静态目录里面的文件就可以被访问 数据的请求方式 axios get 的 请求方式    axios.get(url地址).then(function(success){  //…

WIN server 2003 下无法安装adobe cs3 终极解决方法。

WIN server 2003 下无法安装adobe cs3 当试变了网上的方法还是无法解决时&#xff0c;终极解决方法首先在微软下载一个工具ApplicationVerifier 下载地址在&#xff1a;http://www.microsoft.com/downloads/details.aspx?FamilyIDbd02c19c-1250-433c-8c1b-2619bd93b3a2&Di…