实战复盘:基于C#后端与MySQL构建高可用在线工具(含正则防注入避坑指南)

最近在整理零点博客的资源,发现单纯的静态页面虽然美观,但缺乏互动性。于是决定动手开发一个在线工具开发的实战案例——一个不仅能格式化 JSON,还能实时验证 SQL 语法的安全检查器。

在这个过程中,我深刻体会到了C#后端开发与MySQL数据库结合的魅力,同时也踩了不少坑。今天就把这次的底层拆解和代码经验分享给大家,希望能帮助大家在开发类似工具时少走弯路。

一、 架构选型与技术栈落地

虽然 PHP 的 EMLOG 适合建站,但对于这种高频交互且逻辑复杂的工具,C#后端的优势非常明显(尤其是在处理并发和性能方面)。

  • 后端: C# (.NET Core),负责处理请求、解析数据、安全校验。
  • 数据库: MySQL,存储用户提交的配置或历史记录。
  • 前端: 原生 HTML/CSS/JS,配合 Fetch API 进行接口调用。
  • 数据处理: System.Text.Json 解析 JSON,正则表达式校验输入。

二、 核心痛点:SQL注入防护与预处理语句

很多新手在开发在线工具时,容易忽略安全问题。如果我们在工具中加入了数据保存功能,直接拼接 SQL 语句是绝对禁止的。

之前我用过字符串拼接的方式,结果在测试时随便输入一串 `'; DROP TABLE users; --` 就把库搞挂了。后来重写代码时,我强制使用了预处理语句。这是SQL注入防护最有效的手段。

底层代码拆解(C# + MySQL):

using (var conn = new MySqlConnection(connectionString))
{
    conn.Open();
    // 关键点:使用 @Parameter 而非拼接字符串
    string sql = "INSERT INTO query_history (query_text, created_at) VALUES (@Query, @Time)";

    using (var cmd = new MySqlCommand(sql, conn))
    {
        cmd.Parameters.AddWithValue("@Query", userInput); // 自动处理转义
        cmd.Parameters.AddWithValue("@Time", DateTime.Now);
        cmd.ExecuteNonQuery();
    }
}

看,加上参数化查询后,即使输入恶意代码,数据库也会把它当成普通文本处理,彻底杜绝了注入风险。

三、 JSON/XML 数据解析与接口开发

我们的工具需要接收前端传来的 JSON 数据,经过处理后再返回结果。这里用到了 C# 强大的序列化/反序列化能力。

为了避免手写复杂的 XML 解析逻辑,我直接在接口开发中引入了JSON/XML数据解析:

public class ToolRequest
{
    public string RawJson { get; set; }
    public bool Beautify { get; set; }
}

// 接收请求体并自动映射
[HttpPost]
public IActionResult ProcessTool([FromBody] ToolRequest request)
{
    // 反序列化操作
    dynamic data = System.Text.Json.JsonSerializer.Deserialize(request.RawJson);

    // 处理逻辑...

    return Ok(new { success = true, result = processedData });
}

四、 正则表达式实战与爬虫辅助

在开发一些文本处理类的在线工具时,正则表达式是神技。比如,我们需要校验用户输入的 URL 是否合法,或者从一段混乱的 HTML 中提取标题。

值得一提的是,我在开发这个工具的爬虫开发模块时,利用正则提取了公开 API 的数据。这给我们提供了丰富的测试数据集,避免了因为“没有测试数据”而卡壳的情况。

避坑指南: 正则表达式往往非常脆弱,建议先在 Regex101 等网站上验证逻辑,再写入代码。否则正则写错了,程序会直接崩溃。

五、 总结与源码获取

通过这次开发,我明白了一个道理:接口开发不仅仅是数据的流转,更是安全与性能的博弈。从 MySQL 的预处理语句到 C# 的高效数据处理,每一个环节都影响着在线工具开发的最终体验。

目前,这套工具的源码与完整的部署文档我已经整理好了。如果你对爬虫数据采集或者 C# 后端优化感兴趣,欢迎在零点博客查阅更多实操教程。不要为了技术而技术,解决问题才是王道!