C#滑动验证码拼图验证功能实现(SlideCaptcha)

C#滑动验证码拼图验证功能实现(SlideCaptcha)攻略

问题描述

在网站或移动应用等中,为了防止恶意攻击或机器人入侵,通常需要进行验证码验证。其中,滑动验证码拼图验证功能是一种常见的形式,用户需要按照要求把滑块拖动到正确的位置上,才能通过验证。

本文将介绍如何使用C#语言,结合ASP.NET Web应用程序,来实现滑动验证码拼图验证功能的开发。

解决方案

1.前端实现

首先,我们需要在前端页面中添加滑动验证码拼图验证所需要的HTML、CSS和Javascript代码。其中,下面是一个示例代码:

<div class="slide-captcha-container">
  <div class="slide-captcha-bg">
    <img src="images/background.jpg" />
  </div>
  <div class="slide-captcha-print">
    <img src="images/print.png" />
  </div>
  <div id="slide-block" class="slide-captcha-block"></div>
</div>

<script>
    $(document).ready(function() {
        var slider = new SliderUnlock("#slide-block");
        slider.init();
    });
</script>

上述代码中,我们首先在页面上添加了一个滑动验证码的容器slide-captcha-container,其中包含了一个背景图slide-captcha-bg和一个打印图案slide-captcha-print,以及一个滑块slide-block。接着,我们使用了Javascript插件SliderUnlock实现了滑块的拖动功能,并且通过$(document).ready事件,当文档准备好后自动初始化滑块功能。

以下是一段示例的CSS代码,用于实现页面的布局和样式:

.slide-captcha-container {
    position: relative;
    width: 330px;
    height: 200px;
}

.slide-captcha-bg {
    position: absolute;
    top: 0;
    left: 0;
    width: 330px;
    height: 200px;
    background-color: #f5f5f5;
}

.slide-captcha-print {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 130px;
    height: 130px;
    margin-top: -65px;
    margin-left: -65px;
    z-index: 1;
}

.slide-captcha-block {
    position: absolute;
    top: 50%;
    left: 0;
    width: 50px;
    height: 50px;
    margin-top: -25px;
    background-color: #fff;
    border: 1px solid #ddd;
    border-radius: 25px;
    z-index: 2;
    cursor: pointer;
}

2.后端实现

接下来,我们需要在后端服务器中对滑动验证码拼图验证进行后台验证,以确保用户输入的验证码是否正确。

下面是一段基本的后端验证代码,用于对滑块的具体位置进行验证:

public bool CheckSlideCaptcha(int sliderX, int bgWidth, int printWidth) {
    float offset = 10; // 容差范围
    float err = Math.Abs((float)bgWidth * (float)sliderX / (float)printWidth - (float)sliderX);
    if (err < offset) {
        return true;
    } else {
        return false;
    }
}

上述代码中,我们首先传递了用户输入的滑块位置sliderX、背景图宽度bgWidth和打印图案宽度printWidth三个参数。然后,我们使用容差范围来判断滑块的位置是否正确,如果误差在限定范围内,则验证通过,否则验证失败。

3.完整示例

下面是一段完整的示例代码,用于展示如何将前端和后端代码结合起来,实现滑动验证码拼图验证的完整功能:

<!doctype html>
<html>
<head>
    <title>Slide Captcha验证示例</title>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <style>
        .slide-captcha-container {
            position: relative;
            width: 330px;
            height: 200px;
        }

        .slide-captcha-bg {
            position: absolute;
            top: 0;
            left: 0;
            width: 330px;
            height: 200px;
            background-color: #f5f5f5;
        }

        .slide-captcha-print {
            position: absolute;
            top: 50%;
            left: 50%;
            width: 130px;
            height: 130px;
            margin-top: -65px;
            margin-left: -65px;
            z-index: 1;
        }

        .slide-captcha-block {
            position: absolute;
            top: 50%;
            left: 0;
            width: 50px;
            height: 50px;
            margin-top: -25px;
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 25px;
            z-index: 2;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div class="container">
        <br />
        <div class="row">
            <div class="col-md-6">
                <div class="slide-captcha-container">
                    <div class="slide-captcha-bg">
                        <img src="images/background.jpg" />
                    </div>
                    <div class="slide-captcha-print">
                        <img src="images/print.png" />
                    </div>
                    <div id="slide-block" class="slide-captcha-block"></div>
                </div>
            </div>
            <div class="col-md-6">
                <h3>请滑动图片验证</h3>
                <hr />
                <p>请将滑块移动到正确位置上</p>
                <br />
                <button id="check-btn" class="btn btn-primary">验证</button>
            </div>
        </div>
        <br />
    </div>

    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script src="slide-captcha.js"></script>
    <script>
        $(document).ready(function () {
            var slider = new SliderUnlock("#slide-block");
            slider.init();

            $("#check-btn").on("click", function () {
                var sliderX = parseInt($("#slide-block").css("left"));
                var bgWidth = $(".slide-captcha-bg img").width();
                var printWidth = $(".slide-captcha-print img").width();

                $.post("SlideCaptchaHandler.ashx", { sliderX: sliderX, bgWidth: bgWidth, printWidth: printWidth }, function (res) {
                    if (res === "true") {
                        alert("验证通过!");
                    } else {
                        alert("验证失败,请重新尝试!");
                        slider.reset();
                    }
                });
            });
        });
    </script>
</body>
</html>

同时,我们还需要在服务器端添加相对应的SlideCaptchaHandler.ashx文件,用于处理用户提交的滑块位置信息,下面是一段示例代码:

using System;
using System.Web;
using System.Web.SessionState;

public class SlideCaptchaHandler : IHttpHandler, IRequiresSessionState
{
    public void ProcessRequest(HttpContext context)
    {
        HttpRequest request = context.Request;
        HttpResponse response = context.Response;

        int sliderX = Convert.ToInt32(request.Form["sliderX"]);
        int bgWidth = Convert.ToInt32(request.Form["bgWidth"]);
        int printWidth = Convert.ToInt32(request.Form["printWidth"]);

        if (CheckSlideCaptcha(sliderX, bgWidth, printWidth))
        {
            response.Write("true");
            response.End();
        }
        else
        {
            response.Write("false");
            response.End();
        }
    }

    public bool IsReusable
    {
        get { return false; }
    }

    private bool CheckSlideCaptcha(int sliderX, int bgWidth, int printWidth)
    {
        float offset = 10; // 容差范围
        float err = Math.Abs((float)bgWidth * (float)sliderX / (float)printWidth - (float)sliderX);
        if (err < offset)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

总结

本文介绍了如何使用C#和ASP.NET Web应用程序来实现滑动验证码拼图验证功能的开发。我们首先在前端页面中添加了验证码的HTML、CSS和Javascript代码,然后通过Javascript插件实现滑块的拖动功能。最后,我们在后端服务器中对用户提交的验证码进行验证,确保验证码输入的正确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#滑动验证码拼图验证功能实现(SlideCaptcha) - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#中判断本地系统的网络连接状态的方法

    C#中判断本地系统的网络连接状态有多种方法,以下是其中两种方法的详细讲解。 方法一:使用.NET Framework提供的System.Net.NetworkInformation命名空间中的NetworkInterface类。 步骤如下: 引用System.Net.NetworkInformation命名空间。 使用NetworkInterface类的Ge…

    C# 2023年6月7日
    00
  • C#实现系统托盘通知的方法

    C#实现系统托盘通知的方法 在Windows应用程序中,系统托盘是一个很重要的交互方式,在不影响用户正常工作的情况下,可以及时方便的向用户提供各种需要处理和展示的数据。C#提供了丰富的API,帮助我们实现系统托盘通知,本文将介绍两种常见的实现方法。 方法一:使用NotifyIcon类实现 NotifyIcon类为我们提供了丰富的事件和属性,使得我们的系统托盘…

    C# 2023年6月7日
    00
  • 如何搭建新的WPF项目框架

    如何搭建新的WPF项目框架 搭建新的WPF项目框架可以帮助我们更好地组织和管理WPF应用程序的代码。本文将提供详细的“如何搭建新的WPF项目框架”的完整攻略,包括如何创建项目结构、如何添加基础类以及两个示例。 创建项目结构 要创建新的WPF项目框架,我们需要执行以下步骤: 创建一个新的WPF应用程序项目。 在项目中创建一个名为“Infrastructure”…

    C# 2023年5月15日
    00
  • C#笔记之EF Code First 数据模型 数据迁移

    C#笔记之EF Code First 数据模型 数据迁移 在使用.NET Core进行开发时,EF Code First被广泛用作ORM框架,在应用程序开发的不同阶段,会涉及到数据模型的改变,而EF Code First提供了一些工具来管理数据迁移,下面将介绍如何进行EF Code First数据模型的创建、数据迁移的方法和注意点。 创建数据模型 新建项目 …

    C# 2023年6月1日
    00
  • WPF弹出自定义窗口的方法

    WPF是一种基于XAML语言的用户界面框架,可以用于创建跨平台的用户界面(UI)。在WPF应用程序中,有时需要弹出自定义窗口以实现特殊的需求,本文将详细讲解WPF弹出自定义窗口的方法。 第一步:创建自定义窗口 要弹出自定义窗口,首先需要创建自定义窗口。在WPF中,可以通过XAML语言或代码创建自定义窗口。以下是一个简单的例子: <Window x:Cl…

    C# 2023年6月3日
    00
  • C#调用易语言写的Dll文件方法

    C# 调用易语言写的DLL文件有两种方式:使用DllImport特性和使用COM组件。下面详细讲解这两种方法的完整攻略。 DllImport 编写易语言DLL 在易语言中编写函数代码。 在函数顶部添加 #dllexport 命令。 在函数返回值的数据类型前加上 #stdcall 命令。 将函数编译为DLL文件。 以下为示例代码,函数名称为 Add ,返回类型…

    C# 2023年6月7日
    00
  • .NET实现:将EXE设置开机自动启动

    首先需要说明的是,将EXE设置开机自动启动的操作不是由.NET实现的,而是由操作系统和桌面环境提供的功能实现的。 在Windows操作系统中,可以通过两种方式实现将EXE设置开机自动启动。 1.在启动文件夹中创建快捷方式 在Windows操作系统中,可以将应用程序的快捷方式放置到启动文件夹中,这样系统会在启动时自动运行该快捷方式所指向的应用程序。 要将应用程…

    C# 2023年5月15日
    00
  • 实例代码讲解c# 线程(上)

    让我来详细讲解一下“实例代码讲解c# 线程(上)”的完整攻略。 标题 首先,我们需要为文章设置标题。根据内容来判断,可以设置成如下格式: 实例代码讲解c# 线程(上) 介绍 在本篇文章中,我们将会介绍c#编程语言中线程的概念和使用方法。 线程是什么? 线程是程序执行的一条路径。在c#中,线程是一个轻量级的操作系统对象,它能够并发地执行代码。c#中的线程可以与…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部