重构零点博客:C#接口对接EMLOG数据库与SQL注入防护实战笔记
大家好,我是零点博客的开发者。最近在整理技术笔记时,发现博客后端与前端的数据交互还有优化空间,尤其是针对EMLOG生态的API开发。今天不整虚的,直接分享我是如何用C#开发一套对接EMLOG的接口服务,以及如何在过程中搞定MySQL数据库操作、防止SQL注入和解析JSON数据的实操过程。
一、 项目背景与需求
我们的目标是让零点博客的首页加载更快,数据交互更灵活。直接用PHP运行EMLOG虽然稳定,但在高并发下处理复杂的计算逻辑(比如数据聚合、图表生成)略显吃力。于是,我利用业余时间写了一个C#的后台服务,专门用来处理数据库查询并返回接口,前端JS直接拿数据渲染。
1. 技术选型:C# 结合 EMLOG
这里需要注意,EMLOG本身是PHP环境,我们要做的是“读取”而不是“写入”(除非接口做了权限验证)。我们通过读取EMLOG的数据库配置文件获取连接信息,利用C#的MySql.Data包建立连接。
二、 核心难点:SQL注入防护与预处理
在技术笔记里,最忌讳的就是直接拼接SQL。为了安全,我强制要求所有数据库操作必须使用预处理语句。
1. 底层原理
简单的字符串拼接(例如 "SELECT * FROM blog WHERE title='" + keyword + "'")极易被黑客利用。预处理语句将SQL结构先发送给数据库编译,参数值在之后发送,这样即使参数里包含恶意代码,数据库也会将其视为普通文本处理。
2. 代码实战
using (MySqlConnection conn = new MySqlConnection(connStr))
{
conn.Open();
// 使用参数化查询,防止SQL注入
string sql = "SELECT title, content FROM emlog_post WHERE log_id = @LogId";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@LogId", postId);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// 读取数据并构建JSON对象
var post = new {
Title = reader["title"].ToString(),
Content = reader["content"].ToString()
};
result.Add(post);
}
}
}
这段代码就是我之前遇到的坑点:一开始直接在SQL里拼接了变量,结果一次恶意测试就把测试库删了(幸好有备份)。改用`Parameters.AddWithValue`后,问题迎刃而解。
三、 数据交互:JSON解析与接口开发
接口写好了,接下来就是怎么给前端看。C#处理JSON非常方便,我使用的是Newtonsoft.Json库。
1. 返回JSON格式
后端直接输出JSON字符串,前端AJAX请求即可。为了方便调试,我开启了Swagger或者简单的测试页面。
var serializer = new JsonSerializer();
var json = JsonConvert.SerializeObject(result);
context.Response.ContentType = "application/json";
context.Response.Write(json);
2. 正则表达式的妙用
EMLOG生成的文章内容里通常带有大量的HTML标签。为了让前端展示更清爽,我在返回数据前用正则表达式做了一次简单的清洗:
// 移除HTML标签,只保留纯文本
string plainText = Regex.Replace(htmlContent, "<[^>]*?>", " ");
// 或者截取摘要
string summary = Regex.Match(plainText, ".{0,100}...").Value;
四、 爬虫开发辅助与避坑指南
在做这套系统时,我还顺便写了一个简单的爬虫,用来抓取其他行业博客的最新文章,然后整合到零点博客的“推荐阅读”板块。这完全是基于刚才建立的接口实现的。
避坑指南:
- 连接池耗尽: 在高并发下,MySQL连接一定要及时关闭,使用`using`语句块是必须的,否则服务挂得很快。
- 编码问题: EMLOG数据库如果是UTF8mb4,C#连接字符串记得加上`CharSet=utf8mb4`,否则中文会乱码。
- 接口超时: 如果查询数据量太大,JS端要设置合适的timeout,否则看起来像是卡死了。
五、 总结
通过这次开发,我深刻体会到了技术笔记的记录价值。很多坑只有亲自踩过才能记住。将C#的强类型优势引入EMLOG生态,不仅能提升性能,还能通过预处理语句保障安全。大家如果有兴趣,可以参考我的源码来修改自己的博客结构。
关注零点博客,获取更多前端开发、爬虫开发以及C#后端的干货教程。



评论一下吧
取消回复