您的位置:首页 > 科技 > IT业 > 代做网站在哪找活_图床外链生成器_互联网营销师培训教材_站长工具关键词查询

代做网站在哪找活_图床外链生成器_互联网营销师培训教材_站长工具关键词查询

2025/4/16 7:23:55 来源:https://blog.csdn.net/WangMing_X/article/details/146248301  浏览:    关键词:代做网站在哪找活_图床外链生成器_互联网营销师培训教材_站长工具关键词查询
代做网站在哪找活_图床外链生成器_互联网营销师培训教材_站长工具关键词查询

一、核心应用场景

  1. 用户登录/注册验证:防止恶意程序批量注册
  2. 表单提交防护:确保关键操作由真人执行
  3. API接口限流:抵御自动化脚本攻击
  4. 敏感操作验证:如支付、信息修改等关键步骤
  5. 数据防爬机制:保护网站内容不被爬虫抓取

二、技术实现方案

1. 基础架构设计

// 验证码服务架构
+------------------------+
|  验证码生成模块         | ← 随机字符
|  (CaptchaGenerator)    |
+------------------------+↓
+------------------------+
|  图像处理模块           | ← 添加干扰元素
|  (ImageProcessor)      |
+------------------------+↓
+------------------------+
|  验证码存储模块         | → Redis/Session
|  (CaptchaStorage)      |
+------------------------+

2. 完整实现代码(ASP.NET MVC)

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web.Mvc;namespace CaptchaDemo.Controllers
{public class CaptchaController : Controller{/// <summary>/// 生成验证码图片(带干扰元素)/// </summary>[HttpGet]public ActionResult Generate(int width = 120, int height = 40){// 生成随机验证码(4-6位)string captchaCode = GenerateRandomCode(4);// 创建位图对象using (Bitmap bitmap = new Bitmap(width, height)){using (Graphics g = Graphics.FromImage(bitmap)){// 设置画布属性g.Clear(Color.WhiteSmoke);g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;// 添加干扰线(5-8条)AddNoiseLines(g, width, height);// 绘制验证码文字DrawCaptchaText(g, captchaCode, width, height);// 添加噪点(100-200个)AddNoisePoints(bitmap, width, height);}// 输出图片流using (MemoryStream stream = new MemoryStream()){bitmap.Save(stream, ImageFormat.Jpeg);return File(stream.ToArray(), "image/jpeg");}}}/// <summary>/// 生成随机验证码(包含数字和字母)/// </summary>private string GenerateRandomCode(int length){const string chars = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"; // 排除易混淆字符Random random = new Random(Guid.NewGuid().GetHashCode());char[] result = new char[length];for (int i = 0; i < length; i++){result[i] = chars[random.Next(chars.Length)];}return new string(result);}/// <summary>/// 绘制干扰线/// </summary>private void AddNoiseLines(Graphics g, int width, int height){Random random = new Random();for (int i = 0; i < 6; i++){int x1 = random.Next(width);int y1 = random.Next(height);int x2 = random.Next(width);int y2 = random.Next(height);g.DrawLine(new Pen(Color.FromArgb(random.Next(128, 256),random.Next(128, 256),random.Next(128, 256))), x1, y1, x2, y2);}}/// <summary>/// 绘制验证码文字(带旋转效果)/// </summary>private void DrawCaptchaText(Graphics g, string code, int width, int height){Random random = new Random();float charWidth = width / (code.Length + 1);for (int i = 0; i < code.Length; i++){// 设置随机颜色Brush brush = new SolidBrush(Color.FromArgb(random.Next(50, 150),random.Next(50, 150),random.Next(50, 150)));// 随机旋转角度(-30°到30°)g.TranslateTransform(charWidth * i + charWidth / 2, height / 2);g.RotateTransform(random.Next(-30, 30));// 绘制文字g.DrawString(code[i].ToString(),new Font("Arial", 18, FontStyle.Bold),brush,new PointF(-charWidth / 3, -10),StringFormat.GenericTypographic);// 重置变换矩阵g.ResetTransform();}}/// <summary>/// 添加噪点/// </summary>private void AddNoisePoints(Bitmap bitmap, int width, int height){Random random = new Random();for (int i = 0; i < 150; i++){int x = random.Next(width);int y = random.Next(height);bitmap.SetPixel(x, y, Color.FromArgb(random.Next(256),random.Next(256),random.Next(256)));}}}
}

三、前端集成教程

1. HTML视图代码

<div class="captcha-box"><img id="captchaImg" src="@Url.Action("Generate", "Captcha")" onclick="refreshCaptcha()" title="点击刷新验证码"/><input type="text" id="captchaInput" placeholder="输入验证码"/>
</div>

2. JavaScript交互

function refreshCaptcha() {// 添加时间戳防止缓存let timestamp = new Date().getTime();document.getElementById('captchaImg').src = '@Url.Action("Generate", "Captcha")?t=' + timestamp;
}// 表单提交验证示例
function validateCaptcha() {let userInput = document.getElementById('captchaInput').value;fetch('/Captcha/Validate?code=' + userInput).then(response => {if(!response.ok) throw new Error('验证码错误');// 后续提交逻辑...});
}

四、服务端验证实现

/// <summary>
/// 验证码校验(需配合Session或Redis存储)
/// </summary>
[HttpPost]
public ActionResult Validate(string code)
{string sessionCode = Session["CaptchaCode"]?.ToString();if(string.IsNullOrEmpty(sessionCode))return Json(new { success = false, message = "验证码已过期" });bool isValid = code.Equals(sessionCode, StringComparison.OrdinalIgnoreCase);// 验证后清除SessionSession.Remove("CaptchaCode");return Json(new { success = isValid });
}

(注:实际部署时需要根据大家的实际情况添加异常处理和日志记录模块)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com