零点博客开发复盘:从EMLOG接口到C#爬虫的防注入实战代码案例与避坑指南
大家好,我是零点博客博主。昨天在重构博客的后端接口时,卡在了 EMLOG 数据库的 MySQL 安全交互这一块。这次更新不只是简单的改版,更是为了给未来开发更复杂的在线工具做铺垫。下面我把自己踩过的坑和最终的解决方案整理成了一份详实的**代码案例**,希望能帮到大家。
一、 架构背景:C#/PHP 混合开发下的后端安全
我们的博客后端核心逻辑使用 C#,为了兼顾旧系统兼容性,不得不处理 PHP 侧的 MySQL 连接。但在对接接口时,最让人头疼的就是数据清洗和注入防护。如果直接拼接 SQL 字符串,分分钟被扫库。
核心难点:SQL注入防护与预处理语句
很多人写代码时为了图快,喜欢用字符串拼接。但在实战中,我强制要求使用预处理语句。下面是一段 C# 连接 MySQL 的代码案例,展示了如何通过 SqlParameter 来防止 SQL 注入:
using MySql.Data.MySqlClient;
public class EmlogDataAccess
{
private string connStr = "Server=localhost;Database=emlog;Uid=root;Pwd=your_password;";
public List<Article> GetArticles(string keyword)
{
List<Article> list = new List<Article>();
using (MySqlConnection conn = new MySqlConnection(connStr))
{
// 关键点:使用参数化查询,彻底杜绝 SQL 注入
string sql = "SELECT title, content FROM emlog_blog WHERE title LIKE @term ORDER BY date DESC";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@term", "%" + keyword + "%"); // 参数化传参
conn.Open();
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
list.Add(new Article
{
Title = reader["title"].ToString(),
Content = reader["content"].ToString()
});
}
}
}
return list;
}
}
这段代码直接在C# 后端开发中跑通后,我再去对照 PHP 的 PDO 方案,发现原理是一致的。这也是**底层拆解**中必须掌握的逻辑。
二、 接口开发与数据解析:JSON/XML 的格式之战
接口开发不仅仅是数据存取,更重要的是数据的输出格式。为了兼容手机端和桌面端,我采用了 JSON 作为主要返回格式,辅以 XML 做备用。这就涉及到JSON/XML数据解析。
在前端开发中,我们常用 JS 来处理返回的数据:
// 模拟接口返回的 JSON 数据
const response = '{ "status": 200, "data": [ { "id": 1, "title": "C# 正则" } ] }';
// 原生 JSON.parse 解析
try {
const resData = JSON.parse(response);
console.log(resData.data[0].title);
} catch (e) {
console.error("数据解析失败,可能是 XML 格式");
}
而在后端解析 XML 时,C# 里的 XmlDocument 或者 LINQ to XML 就非常给力了。如果你是在开发在线工具,比如“网页源码查看器”,这种解析能力是刚需。
三、 爬虫与正则:数据清洗的利器
为了丰富零点博客的内容,我写了几个简单的爬虫开发脚本,去抓取一些技术文档。但是抓下来的 HTML 经常有很多乱码标签,这时候就需要正则表达式大显身手。
下面是一个提取网页标题的代码案例:
using System.Text.RegularExpressions;
public string GetTitleFromHtml(string html)
{
// 匹配 <title>标签中间的内容
string pattern = "<title>([^<>]+)</title>";
Match match = Regex.Match(html, pattern);
if (match.Success)
{
return match.Groups[1].Value.Trim();
}
return "未知标题";
}
这段正则逻辑非常简单,但在实际爬虫中,我们要处理更复杂的嵌套标签。正则表达式是爬虫开发的灵魂,学会了它,你就能把杂乱的 HTML 数据清洗得干干净净。
四、 前端与避坑指南
最后回到 HTML/CSS/JS 前端开发。我在做博客响应式布局时,发现移动端下拉刷新很难做。为了解决这个问题,我使用了 Flexbox 布局配合 Media Queries,确保在手机上操作在线工具时体验流畅。
避坑指南: 1. 不要信任用户输入:无论前端怎么防,后端一定要用预处理语句,这是底线。 2. JSON 解析要加 try-catch:因为网络波动,接口可能返回格式错误的 JSON,不加 try-catch 脚本直接崩了。 3. CSS 避免无限嵌套:嵌套层级超过 3 层就很难维护了,多用父级选择器。



评论一下吧
取消回复