精华内容
下载资源
问答
  • Web验证码实现机制

    千次阅读 2015-04-13 09:43:09
    Web程序中,验证码是经常使用的技术之一。Web程序永远面临未知用户和未知程序的探测。为了防止恶意脚本的执行,验证码技术无疑是首选方案之一。本文将讨论如何在JSP和Servlet中使用验证码技术。  验证码的产生...

            在Web程序中,验证码是经常使用的技术之一。Web程序永远面临未知用户和未知程序的探测。为了防止恶意脚本的执行,验证码技术无疑是首选方案之一。本文将讨论如何在JSP和Servlet中使用验证码技术。 

    验证码的产生思路很简单,在Servlet中随机产生验证码字符序列,并计入session中,JSP中以图片的形式进行显示。当用户在JSP表单中输入验证码并提交时,在相应的Servlet中验证是否与session中保存的验证码一致。下面通过代码,一次演示验证码产生和实现的验证的过程。 
    1.验证码的产生 
          我们需要创建一个名为ValcodeServlet的servlet并在其doGet()方法中完成验证码的产生。首先通过随机数的产生类Random随机产生一个4位的验证码,并将其存入session;然后使用BufferedImage和Graphics类把验证码转为图片,当然为了起到较好的效果,我们需要添加一些干扰线;最后使用ImageIO将图片输出。详细代码如下: 

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
            // 告知浏览当作图片处理
            response.setContentType( "image/jpeg" );
            // 告诉浏览器不缓存
            response.setHeader( "pragma" "no-cache" );
            response.setHeader( "cache-control" "no-cache" );
            response.setHeader( "expires" "0" );
            // 产生由4位数字构成的验证码
            int  length =  4 ;
            String valcode  =  "" ;
            Random rd =   new  Random();
            for ( int  i= 0 ; i<length; i++)
                valcode+=rd.nextInt( 10 );
            // 把产生的验证码存入到Session中
            HttpSession  session = request.getSession();
            session.setAttribute( "valcode" , valcode);
            // 产生图片
            int  width =  80 ;
            int  height =  25 ;
            BufferedImageimg = newBufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
            // 获取一个Graphics
            Graphics g = img.getGraphics();
            // 填充背景色
            g.setColor(Color.WHITE);
            g.fillRect( 0 0 , width, height);
            // 填充干扰线50
            for ( int  i= 0 ; i< 50 ; i++){
                g.setColor( new  Color(rd.nextInt( 100 )+ 155 ,rd.nextInt( 100 )+ 155 ,rd.nextInt( 100 )+ 155 ));
                g.drawLine(rd.nextInt(width), rd.nextInt(height),rd.nextInt(width), rd.nextInt(height));
            }
            // 绘制边框
            g.setColor(Color.GRAY);
            g.drawRect( 0 0 , width- 1 , height- 1 );
            // 绘制验证码
            Font[] fonts = { new  Font( "隶书" ,Font.BOLD, 18 ), new  Font( "楷体" ,Font.BOLD, 18 ), new  Font( "宋体" ,Font.BOLD, 18 ), new  Font( "幼圆" ,Font.BOLD, 18 )};
            for ( int  i= 0 ; i<length; i++){
                g.setColor( new  Color(rd.nextInt( 150 ),rd.nextInt( 150 ),rd.nextInt( 150 )));
                g.setFont(fonts[rd.nextInt(fonts.length)]);
                g.drawString(valcode.charAt(i)+ "" , width/valcode.length()*i+ 2 18 );
            }
            // 输出图像
            g.dispose();
            ImageIO.write(img,  "jpeg" , response.getOutputStream());
        }

    上面的代码只是产生了一个常规的验证码,我们可以根据自己的需要对验证码的产生策略和干扰线进行调整。Servlet编写完毕,别忘了在web.xml中进行配置以便能在JSP中调用,其代码如下:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <servlet>
    <description></description>
    <display-name>ValcodeServlet</display-name>
    <servlet-name>ValcodeServlet</servlet-name><servlet- class >org.icer.jee.valcode.servlet.ValcodeServlet</servlet- class >
    </servlet>
    <servlet-mapping>
    <servlet-name>ValcodeServlet</servlet-name>
    <url-pattern>/ValcodeServlet</url-pattern>
    </servlet-mapping>
     2.验证码的显示 
    产生验证码的servlet编写完毕,并且已经web.xml中进行了配置,那么我们在input.jsp中使用<img />标记以图片的方式调用servlet即可显示验证码。   
    当然为了能起到验证效果,本例中还包含了简单的表单。为了放置验证码无法识别,此处还提供了看不清点击换一张功能,用户点击图片时重新加载验证码图片(问号是为了放置浏览器缓存而不能实现重新请求图片)。JSP中表单部分代码如下: 
    ?
    1
    2
    3
    4
    5
    < formname = "form1" method = "post" action = "LoginServlet" >
    验证码:< inputname = "vcode" type = "text" class = "input02" id = "vcode" >
    < imgsrc = "ValcodeServlet" align = "absmiddle" title = "看不清,点击换一张" onClick = "this.src=this.src+'?'" />
    < inputtype = "submit" name = "button" id = "button" value = "提交" >
    </ form >
     3.实现验证功能 
      当表单提交到CheckServlet时,对用户填写的验证码和session中存储的验证码进行比对,根据结果给出不同提示。代码如下: 
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
            // 获取验证码
            String valcode = request.getSession().getAttribute( "valcode" ).toString();
            // 获取用户填写的验证码
            String vcode = request.getParameter( "vcode" );
            // 进行验证
            if (!valcode.equals(vcode))
                System.out.println( ">>>验证码错误!" );
             else
                System.out.println( ">>>验证码正确!" );
       }
    上面只是根据验证情况在控制台进行了输出,使用时根据实际的业务逻辑需求进行修改即可。 
        总起来说,验证码技术本质上就是利用Java绘图技术把随机产生的验证码字符图形化,并在JSP中以图形调用,最后在用户提交表单后在对应的servlet中进行验证。本文只是提供验证码的基本实现思路,希望大家能灵活应用。 
    展开全文
  • web开发中,经常会使用验证码功能,例如登录、注册,或其他关键功能之前经常会使用。合理使用 验证功能可以防止ddos攻击、爬虫攻击等。  实现效果:  实现原理:  由后台提供生成验证码的接口,前端每次请求会...
  • 验证码实现思路 前端也可是生产验证码,但是前端如果生成简单的验证码,很容易就被爬虫破解,无法很好的起到一个人机识别的效果。而后端生成验证码图片发送给前端,这样的人机识别效果比较好。 验证码流程如下: 1. ...

    验证码实现思路

    前端也可是生产验证码,但是前端如果生成简单的验证码,很容易就被爬虫破解,无法很好的起到一个人机识别的效果。而后端生成验证码图片发送给前端,这样的人机识别效果比较好。

    验证码流程如下:
    1. 前端发送get请求来获取验证码图片。需要前端生成uuid并把uuid的值传到后端;
    2. 后端收到前端的生成验证码请求,生成验证码图片和验证码内容。然后将前端传递过来的uuid值作为键,验证码内容作为值,形成一对键值对,存储在Redis中。同时根据需求设置验证码的有效期。
    3. 前端获取到验证码,等待用户输入验证码之后进行提交请求。提交请求中包含用户输入的验证码以及刚才生成的uuid。
    4. 后端拿到uuid以及用户输入的验证码内容。根据uuid取出Redis中保存的值,如果值为空,那么说明验证码已经过期;如果值不为空,取出值和前端传过来的用户输入的验证码内容进行比价,如果相等,那么就验证码输入正确,否则验证输入错误,将结果返回给前端。
    5. 前端收到后的响应,如果验证码正确,则显示提交成功,否则重新请求后端生成验证码,然后重复上述步骤。
    

    上述就是web后端实现验证码的思路。

    展开全文
  • 验证码原理、作用及实现

    万次阅读 多人点赞 2016-04-10 14:13:44
    验证码能有效阻止恶意登录与注册, 这里主要是验证码的相关原理及操作实现。所用知识为 javaweb 的 jsp servlet xml 及 java 基础知识。

    验证码原理分析及实现

    一、前言

        最近学习实现了验证码,首先附图效果如下:(

        简单说明:

            分别提交正确、错误的验证码及对应效果 

            本文是图文结合说明)

              

        


            

        


    二、验证码的作用

        验证码是目前大多网站所支持并使用于注册登录的。就在于其作用能有效防止恶意登录注册,验证码每次都不同,

    这就可以排除,用其他病毒或者软件自动申请用户及自动登陆.有效防止这种问题。


    三、原理及知识点分析

        1.原理

        验证码于服务器端生成,发送给客户端,并以图像格式显示。客户端提交所显示的验证码,客户端接收并进行比较,若比对失败则不能实现登录或注册,反之成功后跳转相应界面。


        2.主要知识

        服务器端的相关实现,前端运用 HTML 5,CSS 3 ,(可空白留给美工实现,须有  HTML  基础知识)。

        主要是三部分:

                               (提交界面, 成功及失败的)  jsp  

                               (后台对应提交  jsp  验证提交内容的) servlet  (生成验证码的) servlet

                               XML  文档

    四、验证码实现

        1.所用软件为  Myeclipse  

        新建项目,默认生成  index.jsp  新建成功及失败  jsp(文件名自定义,但后台使用其路径时要对应即可)

        注意:将  charset ,pageEncoding 设置为  utf-8   才能支持中文,否则乱码,此处采用 post 方法处理 Form 表单提交数据

        2. jsp 代码写界面

        提交界面jsp 代码及成功 jsp失败 jsp

        三个界面的代码分别如下:

    (1).提交页面主要代码:

        

    (2).成功页面主要代码,验证码输入成功跳转的界面,提示登录成功或验证码输入正确

         

    (3).失败页面主要代码

         

        (  其中form 表单中  action="index"  的 index 不是当前  index.jsp 文件,是对应新建的检测提交数据正误的 servlet  名字可自定义,下面截图所示:

          此处是我的失误,不用这个名字,就不必多解释这一点,希望不会给各位带来不必要的麻烦

           

         )

        3.  servlet 文件处理数据

        新建  servlet  对应  img 的 src 路径来源属性值,此处命名为  ImageServlet  (可自定义但要相互对应)

    实现验证码的产生与显示

    代码如下:

       

        

    新建  action 对应的路径属性值  servlet 命名为  index  实现验证及相关处理

    代码如下:

        

        

       5.新建对应的  XML 文档,代码如下

        

        所实现效果即本文开头所示。

        不足之处请见谅及指教,谢谢览阅。

        源码链接:https://gitee.com/niaonao/IdentifyCodeProject


    展开全文
  • 滑块验证码实现及原理

    千次阅读 2021-01-06 13:54:28
    滑块验证码也是生活中常见的,本文会介绍如何实现以及原理。如果对图片验证码感兴趣的话可以查看这篇文章:图片验证码的实现方法 在这里插入图片描述 实现 滑块验证码主要用到几个属性:clientX,screenX,pageX,...

    前言

    滑块验证码也是生活中常见的,本文会介绍如何实现以及原理。如果对图片验证码感兴趣的话可以查看这篇文章:图片验证码的实现方法
    在这里插入图片描述
    实现

    滑块验证码主要用到几个属性:clientX,screenX,pageX,offsetX,如果对此有疑惑可以查看这篇文章:clientX,screenX,pageX,offsetX的区别

    代码的解释在注释中已经写的很清楚了,还不了解的欢迎留言。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>滑块验证码</title>
        <style>
            * {
                margin: 0px;
                padding: 0px;
                font-family: "微软雅黑";
            }
    
            .drag {
                width: 300px;
                height: 40px;
                line-height: 40px;
                background-color: #e8e8e8;
                position: relative;
                margin: 0 auto;
            }
    
            .bg {
                width: 40px;
                height: 100%;
                position: absolute;
                background-color: #75CDF9;
            }
    
            .text {
                position: absolute;
                width: 100%;
                height: 100%;
                text-align: center;
                user-select: none;
            }
    
            .btn {
                width: 40px;
                height: 38px;
                position: absolute;
                border: 1px solid #ccc;
                cursor: move;
                font-family: "宋体";
                text-align: center;
                background-color: #fff;
                user-select: none;
                color: #666;
            }
        </style>
    </head>
    
    <body>
        <div class="drag">
            <div class="bg"></div>
            <div class="text" onselectstart="return false">请拖动滑块解锁</div>
            <div class="btn">&gt;&gt;</div>
        </div>
        <script>
            //一、定义一个获取DOM元素的方法
            var $ = function (selector) {
                return document.querySelector(selector);
            },
                box = $(".drag"),//容器
                bg = $(".bg"),//背景
                text = $(".text"),//文字
                btn = $(".btn"),//滑块
                success = false,//是否通过验证的标志
    
                distance = box.offsetWidth - btn.offsetWidth;//滑动成功的宽度(距离)
    
    
            //二、给滑块注册鼠标按下事件
            btn.onmousedown = function (e) {
                //1.鼠标按下之前必须清除掉后面设置的过渡属性
                btn.style.transition = "";
                bg.style.transition = "";
    
                //说明:clientX 事件属性会返回当事件被触发时,鼠标指针向对于浏览器页面(或客户区)的水平坐标。
    
                //2.当滑块位于初始位置时,得到鼠标按下时的水平位置
                var e = e || window.event;
                var downX = e.clientX;
                //三、给文档注册鼠标移动事件
                document.onmousemove = function (e) {
    
                    var e = e || window.event;//是为了更好的兼容IE浏览器和非ie浏览器。在ie浏览器中,window.event是全局变量,在非ie中,就需要自己传入一个参数来获取event啦,所以就有了var e = e||window.event
                    //1.获取鼠标移动后的水平位置
                    var moveX = e.clientX;
    
                    //2.得到鼠标水平位置的偏移量(鼠标移动时的位置 - 鼠标按下时的位置)
                    var offsetX = moveX - downX;
    
                    //3.在这里判断一下:鼠标水平移动的距离 与 滑动成功的距离 之间的关系
                    if (offsetX > distance) {
                        offsetX = distance;//如果滑过了终点,就将它停留在终点位置
                    } else if (offsetX < 0) {
                        offsetX = 0;//如果滑到了起点的左侧,就将它重置为起点位置
                    }
    
                    //4.根据鼠标移动的距离来动态设置滑块的偏移量和背景颜色的宽度
                    btn.style.left = offsetX + "px";
                    bg.style.width = offsetX + "px";
    
                    //如果鼠标的水平移动距离 = 滑动成功的宽度
                    if (offsetX == distance) {
    
                        //1.设置滑动成功后的样式
                        text.innerHTML = "验证通过";
                        text.style.color = "#fff";
                        btn.innerHTML = "&radic;";
                        btn.style.color = "green";
                        bg.style.backgroundColor = "lightgreen";
    
                        //2.设置滑动成功后的状态
                        success = true;
                        //成功后,清除掉鼠标按下事件和移动事件(因为移动时并不会涉及到鼠标松开事件)
                        btn.onmousedown = null;
                        document.onmousemove = null;
    
                        //3.成功解锁后的回调函数
                        setTimeout(function () {
                            alert('解锁成功!');
                        }, 100);
                    }
                }
    
                //四、给文档注册鼠标松开事件
                document.onmouseup = function (e) {
                    //如果鼠标松开时,滑到了终点,则验证通过
                    if (success) {
                        return;
                    } else {
                        //反之,则将滑块复位(设置了1s的属性过渡效果)
                        btn.style.left = 0;
                        bg.style.width = 0;
                        btn.style.transition = "left 1s ease";
                        bg.style.transition = "width 1s ease";
                    }
                    //只要鼠标松开了,说明此时不需要拖动滑块了,那么就清除鼠标移动和松开事件。
                    document.onmousemove = null;
                    document.onmouseup = null;
                }
    
    
            }
        </script>
    </body>
    
    </html>
    
    
    

    效果图

    在这里插入图片描述

    展开全文
  • 图文验证码原理 在servlet中随机生成一个指定位置的验证码,一般为四位,然后把该验证码保存到session中.在通过Java的绘图类以图片的形式输出该验证码。为了增加验证码的安全级别,可以输出图片的同时输出干扰线,最后...
  • /***验证码生成与更新*/@WebServlet("/pictureCheckCode")public class PictureCheckCode extendsHttpServlet {private static final long serialVersionUID = 1L;/*该方法主要作用是获得随机生成的颜色*/ public ...
  • 首先创建生成验证码的java实体类,这个类是Struts的action类型的。 如下:CheckImgAction.javapackage cn.edu.imau.shop.user.action;import java.awt.Color; import java.awt.Font; import java.awt.Graphics; ...
  • 我们经常看到登录一些网站或者平台的时候会出现一些需要拖动验证码,实现验证功能,如斗鱼TV所示,于是就想了下这个要怎么实现,自己看了下他的html结构,是两个canvas,然后实现对接,原理应该是一个canvas作为背景...
  • Python识别web验证码

    2020-12-22 05:15:10
    原标题:Python识别web验证码作者:abucode来源:http://aducode.github.io/本文约 2203 字,读完可能需要 5 分钟。 背景最近公司新项目需要搭建一个自动化测试框架,于是研究了一下selenium这个自动化测试工具,用...
  • src链接到生成验证码图片的servlet应用于数据回显CheckImgServletpackage com.huanfeng.cn;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt....
  • web验证码安全性

    2018-11-08 19:33:36
    Web安全】浅谈Web安全验证码  11 months ago 绿盟科技  阅读: 2,445 2018年春运即将拉开帷幕。春运又称“年度全球最大规模的人口流动”,是一部“人民的斗争史”,起初只是与黄牛斗智斗勇,后来为了整治...
  • 主要介绍了Java Web开发之图形验证码的生成与使用方法,较为详细的分析了JSP验证码的实现原理与生成技巧,非常具有实用价值,需要的朋友可以参考下
  • Java滑块验证码原理和实现

    万次阅读 热门讨论 2019-01-14 15:07:13
    文章目录滑块验证码引入滑块验证码原理滑块验证码实现参考 滑块验证码引入 当前互联网流行使用滑块验证码,如下图是网易严选的登录验证部分。 滑块验证码原理 很多网站使用滑块验证码提高网站安全性,为了做到...
  • request.args.get("telephone")if nottelephone:return restful.params_error(message="请输入手机号码")#借用图形验证码类中的获取随机验证码的方法 captcha = Captcha.gene_text(numbers=4).replace(" ", "")#上面...
  • Kaptcha组件实现更多功能的验证码功能,可以调整验证码的大小,图片背景,干扰线条颜色形状等,非常方便。 1,jsp部分 1.1--index.jsp body> Kapatcha验证码 1.2--check.jsp String result = ...
  • Java WEB项目如何实现验证码

    万次阅读 多人点赞 2017-03-16 15:33:21
    什么验证码验证码的作用 验证码为全自动区分计算机和人类的图灵测试的缩写。是一种区分用户还是计算机的全自动程序,这个问题可以由计算机生成并进行判断,但是只有人类才可以解答。可以防止恶意破解密码,...
  • web如何制作验证码功能
  • 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动、点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大致说明下这些验证码原理以及带大家实现一个滑动验证码。...
  • Java滑动验证码原理与实现

    千次阅读 2019-08-21 15:53:19
    本文将讲解滑动验证码由来、原理及功能实现。文章,只贴出主要的逻辑代码,相关的实现代码和资源文件可以在项目中获取。 项目地址:https://gitee.com/gester/captcha.git 同时,推一下字符运算码和运算验证码文章。...
  • @WebServlet("/ValidateCodeServlet")public class ValidateCodeServlet extendsHttpServlet {private static final long serialVersionUID = 1L;publicValidateCodeServlet() {super(); }protected voiddoGet...
  • Web登录之验证码机制

    千次阅读 2013-08-01 23:26:34
    没有 看到验证码机制 的时候,个人想法是 请求后台生成数据用数据库保存 然后前台拿到数据匹配如果正确则可以登录.... 其实事实上接近了... 今天看到一个朋友写的验证登录出来给大家分享下 。 下面我把前...
  • 原理很简单,对于java而言,我们首先开发一个Servlet,这个Servlet的任务就是给客户端产生一个验证码图片的输入,示例代码如下:import java.awt.Color;import java.awt.Graphics;import java.awt.image.Buffe...
  • 验证码原理和实现

    2021-10-29 15:09:51
    1、验证码的作用 验证码是目前大多网站所支持并使用于注册登录的。就在于其作用能有效防止暴力攻击、恶意登录注册,验证码每次都不同, 这就可以排除,用其他病毒或者软件自动申请用户及自动登陆.有效防止这种问题。...
  • 底层原理  表单的重复提交 1)重读提交的情况:(就是说发了2次表单提交的请求,而且发送的请求参数一致) ①.在表单提交到一个Servlet,而Servlet又通过请求转发的方式响应了一个jsp或者html页面这个时候地址栏里面...
  • Web教程(9) 邮件发送和验证码

    千次阅读 2019-07-04 20:04:59
    图片验证码原理2.验证码工具类3.VerifyCodeServlet4.UserServlet.java5.login.jsp 一、使用QQ邮箱发送邮件 1.获取QQ邮箱的授权码 QQ邮箱–> 设置–>账户–> 生成授权码 2.导入jar包 —— mai...
  • web安全常见漏洞原理、危害及其修复建议一、 SQL注入漏洞原理危害修复建议二、XSS漏洞原理危害修复建议三、 CSRF漏洞原理危害修复建议四、 SSRF漏洞原理危害预防建议五、 文件上传漏洞原理危害修复建议六、 暴力破解...
  • 一、验证码由来: ... 对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂-点就是滑动验

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,611
精华内容 7,044
关键字:

web验证码什么原理