大型网站中的验证码解决方案

简介: 先看这个demo的解决方案图 Entity是实体,里面有验证码的实体 private string contentType = "image/pjpeg"; private ImageFormat imageFormat = ImageFormat.

先看这个demo的解决方案图
image
Entity是实体,里面有验证码的实体

        private string contentType = "image/pjpeg";
        private ImageFormat imageFormat = ImageFormat.Jpeg;
        public Bitmap Image
        {
            get;
            set;
        }
        public string ContentType
        {
            get { return contentType; }
            set { contentType = value; }
        }
        public ImageFormat ImageFormat
        {
            get { return imageFormat; }
            set { imageFormat = value; }
        }

Plugin是插件
这个验证码是插件机制实现的
接口文件为
    public interface IVerifyImage
    {
        VerifyImageInfo GenerateImage(string code, int width, int height, Color bgcolor, int textcolor);
    }

provider类是一个抽象工厂
代码为

        private static Hashtable _instance = new Hashtable();
        private static object lockHelper = new object();
        //通过接口和反射结合配置文件信息来做整站多验证码技术
        public static IVerifyImage GetInstance(string assemlyName)
        {
            if (!_instance.Contains(assemlyName))
            {
                lock (lockHelper)
                {
                    if (!_instance.ContainsKey(assemlyName))
                    {
                        IVerifyImage p = null;
                        try
                        {
                            p = (IVerifyImage)Activator.CreateInstance(Type.GetType(string.Format("Plugin.VerifyImage.{0}.VerifyImage,Plugin.VerifyImage.{0}", assemlyName), false, true));
                        }
                        catch
                        {
                            p = new Plugin.VerifyImage.JpegImage.VerifyImage();
                        }
                        _instance.Add(assemlyName, p);
                    }
                }
            }
            return (IVerifyImage)_instance[assemlyName];
        }

验证码相关对象是通过发射机制创建的
具体路径信息写在配置文件中
这样可以设置多个验证码类

具体验证码相关代码请下载这个demo自己去研究

做一个页面,重写他的onInit事件,把验证码输出出来
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            string verifyAssembly = "JpegImage";//此处信息可从配置文件获得
            string bgColor = "";//Request.QueryString["bgcolor"].Trim();
            int fontColor = 1; //StrToInt(Request.QueryString["fontcolor"].Trim(), 1);
            string[] bgcolorArray = bgColor.Split(',');
            Color bg = Color.White;
            if (bgcolorArray.Length == 1 && bgColor != string.Empty)
            {
                bg = ToColor(bgColor);
            }
            else if (bgcolorArray.Length == 3 && IsNumericArray(bgcolorArray))
            {
                bg = Color.FromArgb(StrToInt(bgcolorArray[0], 255), StrToInt(bgcolorArray[1], 255), StrToInt(bgcolorArray[2], 255));
            }
            VerifyImageInfo verifyimg = Plugin.VerifyImage.VerifyImageProvider.GetInstance(verifyAssembly).GenerateImage(CreateAuthStr(5, false), 120, 60, bg, fontColor);

            Bitmap image = verifyimg.Image;

            System.Web.HttpContext.Current.Response.ContentType = verifyimg.ContentType;

            //MemoryStream ms = new MemoryStream();

            image.Save(this.Response.OutputStream, verifyimg.ImageFormat);

        }

这里涉及到很多工具方法,请下载demo自己研究


调用验证码可以在页面写JS代码
<script type="text/javascript">
   document.getElementById('vcodeimg').src='/tools/VerifyImagePage.aspx?id=4&time=' + Math.random();
</script>

  
源代码下载
vertify.rar

目录
相关文章
|
3月前
|
存储 SQL JavaScript
聊一聊常见的浏览器数据存储方案(上)
聊一聊常见的浏览器数据存储方案(上)
|
7月前
|
机器学习/深度学习 人工智能 Java
验证码破解全流程实战
验证码破解全流程实战
259 0
验证码破解全流程实战
|
3月前
|
存储 前端开发 JavaScript
聊一聊常见的浏览器数据存储方案(下)
聊一聊常见的浏览器数据存储方案(下)
|
8天前
|
安全 网络安全 数据安全/隐私保护
关于无感验证码的一些感想
无感验证码改善用户体验,通过分析用户行为和设备特征实现悄无声息的验证,有效防范恶意攻击。但其潜在的隐私问题、准确性和技术挑战不容忽视,需平衡隐私保护与系统安全,提高容错性和兼容性,以推动其发展和应用。
|
7天前
|
机器学习/深度学习 编解码 算法
无感验证码的工作原理
无感验证码是一种隐形的身份验证机制,通过分析用户行为(如鼠标移动、点击)和设备信息来辨别真实用户,防止机器人攻击。工作流程包括页面加载验证脚本、收集行为和设备数据、传输数据至服务器端进行分析、返回验证结果。示例代码展示了如何收集鼠标事件和设备信息,并发送到服务器。实际应用中,需采用更复杂算法和安全措施以确保安全性。
|
9月前
|
存储 前端开发 安全
强化用户体验与安全性:前端单点登录和统一认证的最佳实践与区别
互联网发展了这么多年,各种更新皆为了提供更好更安全的上网环境。同时为了提供更好的用户体验、减少用户反复输入用户名和密码的繁琐操作,并确保账户安全,前端领域中的单点登录(SSO)和统一认证(Unified Authentication)成为了重要概念。
强化用户体验与安全性:前端单点登录和统一认证的最佳实践与区别
|
4月前
|
安全 API 数据处理
API接口技术:架构、设计、安全性与实践
随着数字化和信息化进程的加速,应用程序接口(API)在软件开发和数据处理中扮演着越来越重要的角色。API不仅是不同软件应用程序之间的桥梁,也是软件开发人员和数据科学家进行数据交换和功能调用的关键工具。本文将深入探讨API接口的技术,包括架构、设计、安全性以及实践应用。
|
8月前
|
文字识别 JavaScript 安全
怼就完事了,总结几种验证码的解决方案
怼就完事了,总结几种验证码的解决方案
275 0
|
9月前
|
SQL 安全 网络安全
直播软件源码开发搭建提高安全性方案
直播软件源码平台的防火墙功能是极为重要,且不可或缺的,它的加入有效提高了直播软件源码平台的安全性,保护了用户的信息,为用户构建一个绿色安全的直播软件平台。
直播软件源码开发搭建提高安全性方案
|
运维 机器人 API
细数验证码的N种生成方式
验证码(CAPTCHA)是一种用于确定网站或应用程序使用者是否为人类的技术。它通常由一组图像或数字组成,用户需要输入正确的内容才能通过验证。验证码被广泛用于防止自动化脚本或机器人攻击,以确保用户是真正的人类。
352 0
细数验证码的N种生成方式