前言:零点博客的实战复盘
做 EMLOG 这类轻量级博客系统二次开发,或者开发 C# 生成 MySQL 在线工具时,核心永远离不开数据交互。上个月,我花了两天时间撸了一个纯 C# 后端的数据库备份小工具,踩了不少坑,今天就拿 SQL 语句 的处理和防注入这块来跟大家聊聊,不整虚的,直接上干货。
一、 写好 SQL 语句:从 EMLOG 说起
在做在线工具时,我们要把表结构导出来。针对 MySQL,最直接的方式就是拼 SQL 语句。比如我们要备份一张用户表:
string sql = $"SELECT * FROM emlog_user WHERE uid > {startId}";看着简单,但直接拼字符串在处理 ID 是变量时,如果你忘了加引号,SQL 语句立马就报错。所以在开发前端交互(HTML/JS)获取用户输入的 ID 时,后端务必做严格的校验,这是第一道防线。
二、 SQL 注入防护:预处理语句才是硬道理
很多人在学 PHP 或 C# 后端开发时,最容易忽视的就是 SQL 注入。之前有个新手朋友问我,为什么输入 ' OR 1=1 就能进后台?其实就是因为 SQL 语句拼接没做好。在 C# 中,一定要用 预处理语句:
string sql = "SELECT * FROM emlog_user WHERE uid = @uid";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@uid", userId);
这种方式无论前端传来什么变态的参数,MySqlConnector 都会把它当字符串处理,彻底切断 SQL 注入 的路子。这个技巧在任何后端语言里都是通用的,千万别偷懒。
三、 JSON/XML 解析:让数据更灵活
查出来的数据,为了方便前端展示,我们通常转成 JSON。这里涉及 JSON/XML 数据解析。C# 里可以直接用 `JsonConvert.SerializeObject()`,但要注意空值处理。
四、 正则表达式:清洗数据
有时候用户输入的脏数据特别多,比如 HTML 标签或者多余的空格。这时候正则表达式就派上用场了:
Regex.Replace(input, @"<[^>]+>", ""); // 清除 HTML 标签结合爬虫开发的话,这种清洗逻辑更是必不可少。
五、 总结与源码
总结一下,开发在线工具,代码逻辑得闭环。从 C# 连接 MySQL,到拼接 SQL 语句,再到利用预处理语句防御 SQL 注入,最后处理 JSON/XML,这就是一个完整的数据流。
零点博客仓库里我已经把这个工具的 C# 后端源码上传了,里面包含了 SQL 注入测试用例和修复后的代码,建议大家拉下来跑跑看,有什么问题评论区见。



评论一下吧
取消回复