写在前面
最近在零点博客折腾后端重构,把原本的PHP部分逐步迁移到了C#。在涉及EMLOG数据库交互的时候,我发现很多初学者甚至老手都容易在接口开发中栽跟头——尤其是数据安全这块。今天不整虚的,直接开一篇实操教程,咱们从零搭建一个安全的文章查询接口,重点讲讲SQL注入防护和JSON数据解析,全程干货,拒绝AI套话。
一、 为什么我们需要预处理语句?
很多人直接拼接SQL字符串,比如:
string sql = "SELECT * FROM emlog_blog WHERE title = '" + userText + "'";
兄弟们,这要是遇到恶意的输入 " OR 1=1 --,你的数据库分分钟就崩了。这是典型的SQL注入。为了保证底层逻辑的稳健,我们必须使用预处理语句。
二、 实战:C# 调用 MySQL 并返回 JSON 数据
咱们来写一个最基础的查询接口,模拟爬虫或者前端获取EMLOG文章列表的场景。
1. 引用必要的 NuGet 包
记得先安装 MySql.Data 包。
2. 核心代码实现
using System;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using System.Text.Json; // 引入JSON序列化
public class ArticleApi
{
// 数据库连接字符串,请根据你的环境修改
private static string connStr = "Server=localhost;Database=emlog;Uid=root;Pwd=123456;";
public void GetArticles()
{
// 使用 try-catch 保证程序健壮性
try
{
using (MySqlConnection conn = new MySqlConnection(connStr))
{
conn.Open();
// 1. 编写带参数的SQL
string sql = "SELECT gid, title, content FROM emlog_blog ORDER BY gid DESC LIMIT 10";
// 2. 创建命令对象并绑定参数
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
// 3. 使用参数化查询(核心防注入)
// 即使传入的参数包含特殊字符,数据库也会把它当成普通文本处理
cmd.Parameters.AddWithValue("@gid", 0);
// 4. 执行查询
using (MySqlDataReader reader = cmd.ExecuteReader())
{
var articles = new List<Dictionary<string, object>>();
// 5. 读取数据并填充列表
while (reader.Read())
{
var item = new Dictionary<string, object>();
item.Add("id", reader["gid"]);
item.Add("title", reader["title"]);
item.Add("content", reader["content"]); // 实际开发中建议截断长度
articles.Add(item);
}
// 6. 将对象列表转换为 JSON 字符串返回给前端或爬虫
string jsonString = JsonSerializer.Serialize(articles);
Console.WriteLine(jsonString);
}
}
}
}
catch (Exception ex)
{
// 记录错误日志,千万别直接输出敏感信息
Console.WriteLine("Error: " + ex.Message);
}
}
}
三、 避坑指南与正则表达式的作用
接口写好了,不代表万事大吉。前端的输入往往也是不可信的。在这里,正则表达式就派上用场了。
假设用户在前端输入了一个很长的标题或者包含脚本标签的内容,我们可以在数据进入C#层之前,先用正则清洗一下:
// 简单的 XSS 和 长度过滤
public bool ValidateInput(string input)
{
// 移除 script 标签等危险字符
string cleanInput = System.Text.RegularExpressions.Regex.Replace(input, @"<script>.*?</script>", "");
// 限制长度,防止超长输入拖垮查询
if (cleanInput.Length > 100)
return false;
return true;
}
四、 总结
通过这篇实操教程,相信大家已经掌握了在C#环境下如何安全地操作MySQL数据库。核心就两点:1. 永远不要拼接SQL字符串,使用预处理语句;2. 善用正则表达式做输入清洗。
无论是做在线工具开发,还是爬虫抓取EMLOG数据,安全永远是第一位的。下次写接口时,记得回头看看这篇复盘,别再犯老毛病了。代码已跑通,有问题的可以在评论区留言。



评论一下吧
取消回复