<!DOCTYPE html>

零点博客实战:C#开发在线SQL检测工具,详解正则与预处理语句代码案例

零点博客实战:C#开发在线SQL检测工具,详解正则与预处理语句代码案例

大家好,我是零点博主。在做 C# 后端开发时,大家肯定最头疼的就是SQL注入问题。虽然现在有各种 ORM 框架,但底层逻辑搞不懂,写起在线工具来总是心里没底。今天不扯别的,直接上干货,我们来写一个基于 C# 的在线SQL检测工具的完整代码案例。这不仅仅是一个小工具,更是理解 C# 正则表达式、MySQL 预处理语句以及 JSON 数据解析的绝佳实战。

一、 为什么我们需要这个工具?

假设你在维护一个类似 EMLOG 的轻量级博客系统,或者你自己写了一个简单的爬虫去抓取数据。你无法保证所有输入都是干净的。如果直接拼接 SQL,分分钟被脱裤。我们这个案例的目标是:接收用户输入,先用正则表达式净化数据,再通过预处理语句安全地存入 MySQL。下面是核心的 C# 代码案例演示。

二、 核心功能实现:C# 正则表达式校验与预处理

首先,我们在后端定义一个方法,用来清洗用户输入。我们使用一个简单的正则来过滤掉常见的 SQL 关键字尝试(注意:正则只能做初级过滤,核心还得靠预处理)。

using System;
using System.Text.RegularExpressions;

namespace ZeroPointBlog.Core
{
    public class SqlSanitizer
    {
        // 这里是一个简单的正则,用于示例
        // 实际生产环境正则表达式极其复杂,需要包含大量 SQL 关键词黑名单
        private static readonly Regex _sqlInjectionRegex = new Regex(@"(union|select|insert|update|delete|drop|script)", RegexOptions.IgnoreCase);

        /// <summary>
        /// 安全处理输入
        /// </summary>
        public static string CleanInput(string userInput)
        {
            if (string.IsNullOrWhiteSpace(userInput)) return userInput;
            // 替换潜在的恶意字符
            return Regex.Replace(userInput, @"[<>\\];", string.Empty);
        }
    }
}

上面的代码很基础,但能演示正则表达式的用法。接下来是重头戏——如何连接 MySQL 并使用预处理语句。这里我假设大家已经熟悉基本的 HTML/CSS/JS 前端交互,重点是后端处理。

三、 MySQL 预处理语句完整代码案例

这是防止 SQL 注入的银弹。下面是一个标准的 C# 连接 MySQL 并插入数据的代码案例:

using MySql.Data.MySqlClient;
using System;
using System.Text;

public void SafeInsertData(string username, string content)
{
    string connStr = "Server=localhost;Database=emlog_db;Uid=root;Pwd=your_password;";
    using (MySqlConnection conn = new MySqlConnection(connStr))
    {
        try
        {
            conn.Open();
            // 1. 定义 SQL 模板(参数用 ? 占位)
            string sql = "INSERT INTO posts (title, content, create_time) VALUES (@title, @content, NOW())";

            using (MySqlCommand cmd = new MySqlCommand(sql, conn))
            {
                // 2. 添加参数并赋值(关键步骤,数据库引擎会自动转义,杜绝 SQL 注入)
                cmd.Parameters.AddWithValue("@title", username);
                cmd.Parameters.AddWithValue("@content", content);

                int rowsAffected = cmd.ExecuteNonQuery();
                Console.WriteLine($"成功插入 {rowsAffected} 行数据");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"数据库操作失败: {ex.Message}");
        }
    }
}

四、 数据交互与 JSON 解析实战

我们的工具写好后,前端肯定需要一个接口来获取结果。我们需要将数据库查出的数据转换为 JSON 格式返回给前端。对于 EMLOG 这样的系统,可能还需要处理 XML 解析,但 JSON 现在更通用。

using System;
using System.Data;
using System.Text.Json;

public string GetSafeDataJson()
{
    // ... MySQL 连接代码省略 ...
    DataTable dt = new DataTable();
    // 查询数据...

    // 将 DataTable 转为 JSON
    string jsonString = JsonSerializer.Serialize(dt);

    return jsonString;
}

五、 避坑指南:从 PHP 到 C# 的那些事

很多从 PHP 转过来的同学,习惯用字符串拼接。但在 C# 里,一定要养成使用预处理语句的习惯。另外,如果你在写爬虫开发,记得处理各种编码问题(如 UTF-8),不要因为乱码导致正则匹配失败。

零点博主提醒: 不要试图在前端做绝对的安全防护,前端代码是可以被修改的。真正的安全防线永远在服务端的预处理语句上。

六、 总结

今天这个实战,我们从正则过滤到 MySQL 预处理,再到 JSON 数据的输出,完整地走了一遍 C# 后端开发的流程。希望这个代码案例能帮到正在学习 EMLOG 二次开发或者 C# 后端的你。动手敲一遍,理解底层逻辑,比看十篇教程都有用。关注零点博客,持续更新前端与后端的干货!