C# 实战复盘:零点博客接入 EMLOG 接口并构建高安全性的 SQL 防注入方案
大家好,我是老陈。最近在维护我的“零点博客”时,遇到了一个经典的需求:如何利用现有的 EMLOG 资源,通过 C# 强大的后端能力,实现文章数据的平滑迁移与同步?
今天不整虚的,直接通过一个实操案例,聊聊我如何用 C# 调用 EMLOG 的 API 接口,获取 JSON 数据,并重点剖析在处理 MySQL 数据库操作时,如何杜绝 SQL注入 的隐患。
一、 需求背景:从 EMLOG 到零点博客的数据打通
EMLOG 是一套老牌的 PHP 博客系统,很多个人站长手里都有。为了不浪费这些数据,我决定在“零点博客”的 C# 后端开发中,增加一个“导入 EMLOG 文章”的功能。
我的思路很清晰:前端页面传参数 -> C# 后端发起请求 -> 获取 EMLOG 返回的 XML 或 JSON 数据 -> 解析后存入零点博客的 MySQL 数据库。
二、 C# 调用接口与 JSON 解析
首先,我们需要解决数据获取的问题。我使用的是 .NET Core 自带的 HttpClient 进行 HTTP 请求。
public async Task<List<BlogArticle>> GetEmlogDataAsync(int limit)
{
using (var httpClient = new HttpClient())
{
// 模拟请求 EMLOG 接口,这里使用公开的示例接口
var response = await httpClient.GetAsync($"http://example.com/api.php?action=article&limit={limit}");
string jsonContent = await response.Content.ReadAsStringAsync();
// 使用反序列化库将 JSON 转换为对象
var result = JsonConvert.DeserializeObject<EmlogApiResponse>(jsonContent);
return result.Data;
}
}
拿到数据后,解析 JSON 只是第一步。为了保证数据纯净,我还用到了正则表达式来清理文章内容中的无用 HTML 标签。比如,只保留 p、h1-h6 标签,去除 script 标签等。
// 简单的正则清洗示例
var cleanContent = Regex.Replace(rawHtml, "<[^>]+>", "").Trim();
三、 痛点:SQL 注入风险与预处理语句的必要性
这是很多初学者最容易踩的坑。在 C# 中连接 MySQL 时,如果直接把前端传来的变量拼接到 SQL 字符串里,SQL注入 随时可能发生。
举个反面教材,如果你像下面这样写,黑客可以在输入框里注入恶意代码:
// ❌ 错误示范:直接拼接字符串
string sql = $"SELECT * FROM articles WHERE id = '{inputId}'";
为了解决这个问题,我必须使用预处理语句。MySQL Connector 提供了 `MySqlCommand` 和 `Parameters` 属性,它能强制参数作为数据值处理,而不是作为 SQL 代码执行。
四、 C# MySQL 防注入终极方案
在“零点博客”的数据同步代码中,我采用了参数化查询。这样做不仅能防注入,还能让数据库驱动自动优化 SQL 执行计划。
public void SaveArticle(string title, string content, int authorId)
{
using (var conn = new MySqlConnection(connectionString))
{
await conn.OpenAsync();
string sql = @"INSERT INTO articles (title, content, author_id, create_time) VALUES (@Title, @Content, @AuthorId, @Time);";
using (var cmd = new MySqlCommand(sql, conn))
{
// 关键点:使用参数化查询
cmd.Parameters.AddWithValue("@Title", title);
cmd.Parameters.AddWithValue("@Content", content);
cmd.Parameters.AddWithValue("@AuthorId", authorId);
cmd.Parameters.AddWithValue("@Time", DateTime.Now);
await cmd.ExecuteNonQueryAsync();
}
}
}
通过这种方式,无论用户输入什么,C# 都会将其视为纯文本数据,彻底消除了安全漏洞。
五、 总结与源码获取
通过这次开发,我发现将C# 后端开发与老旧的 PHP EMLOG 系统结合,是一种非常灵活的开发模式。我们利用 C# 处理复杂的业务逻辑、解析 JSON/XML 以及确保数据库安全,而前端则专注于 HTML/CSS/JS 的页面展示。
这套“零点博客”的同步插件源码及完整的操作文档我已经整理好了。如果你在开发中也遇到了类似的接口对接或 SQL 注入防护问题,欢迎在评论区留言,或者通过站内信获取完整源码。
记住,预处理语句不是加分项,而是构建安全 Web 应用必备的基础设施。



评论一下吧
取消回复