C#重构EMLOG博客后端:从SQL注入防护到JSON接口开发全流程实战

大家好,我是零点博客的博主。最近在折腾咱们的技术架构,想把老牌 CMS EMLOG 的 PHP 后端逐步迁移到 C# .NET Core 上。这不是为了赶时髦,而是为了更好地发挥 C# 在高性能 Web 开发和数据安全处理上的优势。今天这篇干货,不讲虚的,直接复盘整个开发过程中的核心逻辑:怎么连接 MySQL,怎么写接口开发,最最重要的是,怎么防止SQL注入。

一、 搭建环境与数据库基础

咱们用 C# 访问数据库,最经典的组合还是 MySQL。为了省事,我先引入了 MySql.Data 包。其实原理很简单,就是写 SQL 语句。

但是,写 SQL 有个坑,很多新手容易直接拼接字符串。比如:

string sql = "SELECT * FROM emlog_article WHERE title = '" + input + "'";

这在 PHP 里很常见,但在 C# 里绝对不行!如果你不处理好,黑客直接利用这个漏洞搞 SQL注入,你的博客数据就裸奔了。

二、 核心避坑:预处理语句防护

为了解决安全问题,C# 给我们提供了 MySqlCommand 对象,核心是预处理语句。不管用户输入什么,C# 都把它当成数据参数,而不是代码执行。

// 初始化数据库连接
using (MySqlConnection conn = new MySqlConnection("Server=localhost;Database=emlog;User=root;Pwd=123456;"))
{
    conn.Open();
    string sql = "SELECT * FROM emlog_article WHERE uid = @uid";

    // 使用 @参数名 标记占位符,而不是拼接字符串
    using (MySqlCommand cmd = new MySqlCommand(sql, conn))
    {
        cmd.Parameters.AddWithValue("@uid", userId);

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 读取数据逻辑
            }
        }
    }
}

通过这种方式,即使输入 "1 OR 1=1",数据库也不会执行它,只会把它当成普通的字符串处理。这就是 C# 做后端的底气。

三、 前后端分离:JSON接口与XML兼容

迁移到 C# 后,咱们发现 PHP 那套模板引擎(ThinkPHP 的那个)有点重。于是咱们改用标准的接口开发模式。我们返回的数据格式是 JSON,这样前端 JS 处理起来非常方便。

public IActionResult GetArticleList()
{
    // ... 执行上面数据库查询逻辑 ...

    // 构建返回的 JSON 对象
    var result = new 
    {
        code = 200,
        data = articles,
        msg = "success"
    };

    return Json(result); // C# 自带方法,直接转 JSON
}

有时候为了兼容一些老版本的爬虫或者第三方工具,我们也会提供一套简单的 XML 解析接口。大家可以根据需求在 WebApiConfig 里配置 XML 媒体格式类型。

四、 实战项目:开发在线正则工具

光讲理论有点枯燥,咱们在博客里加一个在线工具。功能很简单:用户输入一段文本和正则表达式,后台 C# 利用 正则表达式 进行匹配,返回结果。

public string CheckRegex(string input, string pattern)
{
    try
    {
        Regex rgx = new Regex(pattern);
        MatchCollection matches = rgx.Matches(input);

        // 将匹配到的组整理成字符串返回
        return string.Join("", matches.Cast<Match>().Select(m => m.Value));
    }
    catch (ArgumentException)
    {
        return "正则表达式语法错误";
    }
}

这个功能用到的技术点非常杂:前端 JS 提交请求,后端 C# 接收,使用 System.Text.RegularExpressions 命名空间处理逻辑,最后又转成 JSON 回传给前端。

五、 底层拆解与复盘

在开发过程中,我也踩了不少坑。比如全局异常过滤器没做好,导致 SQL 错误直接暴露在网页上,这时候就要重写 HandleError 中间件。另外,MySQL 字符集一定要设为 utf8mb4,不然 Emoji 表情在 C# 读取的时候会乱码。

总的来说,用 C# 做博客后端,代码结构更清晰,安全性能更强。特别是结合了零点博客现有的静态资源管理,加载速度肉眼可见地提升了。大家如果也想动手试试,建议先从复现这个 SQL 防护的小案例开始。

作者: 零点博主
标签: C# EMLOG MySQL 爬虫开发 在线工具