引言:零点博客的一次折腾经历
最近在折腾零点博客的二次开发,涉及到一个自动采集和清洗数据的功能。原本打算直接用 PHP 写死,但考虑到后续扩展性,最后决定用 Javascript 做前端处理,再通过 C# 后端接口存入 MySQL。中间踩了不少坑,今天把这套关于爬虫开发、JSON解析、正则表达式以及最关键的 SQL注入防护 的流程复盘一下。
一、前端 Javascript:数据清洗与正则实战
爬虫爬下来的数据通常是乱糟糟的 HTML 或者是 JSON 字符串。拿到手后,第一件事就是清洗。这次我用到了强大的 正则表达式。
比如我需要从一段乱码 HTML 中提取标题,或者过滤掉多余的空格:
const rawHtml = "<div class='title'>Hello World</div>";
// 使用正则表达式提取中间内容
const cleanTitle = rawHtml.replace(/<[^>]*>/g, "").trim();
console.log(cleanTitle); // 输出: Hello World
在处理接口返回的 JSON 数据时,我也习惯先用 JS 转一下,防止后端 XML 格式写错导致前端报错。当然,现在主流还是 JSON 解析,性能好又直观。
二、后端 C# 与接口开发:数据落地
清洗完数据后,就需要通过 HTTP 接口传给后端。这里用的是 ASP.NET Core Web API。为了兼容之前的 PHP 代码风格,我把接口做得 RESTful 一些。
接收参数时,不要直接相信前端传过来的数据,一定要做校验。比如我们要把文章标题存入 MySQL,先在 C# 里定义一个模型:
public class ArticleDto
{
public string Title { get; set; }
public string Content { get; set; }
}
三、核心干货:SQL注入防护与预处理语句
这部分是今天的重点。很多新手在写 SQL 语句时,喜欢直接拼接字符串,比如:
INSERT INTO emlog_article (title, content) VALUES ('" + title + "', '" + content + "');这种写法在零点博客的早期教程里我就反复强调过:这是 SQL注入攻击的温床! 一旦用户在标题里输入了 ' OR 1=1 --,整个数据库可能就沦陷了。
所以,在 C# 后端中,我强烈推荐使用预处理语句(Parameterized Queries):
string sql = "INSERT INTO emlog_article (title, content) VALUES (@Title, @Content);";
using (var cmd = new MySqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@Title", articleDto.Title);
cmd.Parameters.AddWithValue("@Content", articleDto.Content);
cmd.ExecuteNonQuery();
}
这样数据库引擎会将变量当成纯数据来处理,彻底杜绝 SQL注入 风险。
四、落地实操:一个完整的流程示例
结合 Javascript 的前端清洗和 C# 的安全存库,流程是这样的:
- 爬虫获取: 使用 Node.js 爬虫抓取目标网页 HTML。
- JS清洗: 通过
RegExp提取纯文本和图片链接,存为 JSON 数组。 - 接口传输: 前端发送
POST请求到 C# 接口。 - 后端处理: C# 接收 DTO 对象,进行空值校验。
- 数据库操作: 开启事务,使用预处理语句批量插入 MySQL。
最后,为了兼容一些老旧的 PHP 环境或 EMLOG 自带功能,我们还可以在代码里留一个兼容层,支持 XML 数据格式的解析。
结语
不管是 PHP 还是 C# 后端,安全永远是第一位的。希望大家在开发在线工具或维护博客时,都能记得加上预处理语句这道保险。下次想聊聊如何在 EMLOG 中利用 PHP 定时任务配合 JS 做数据监控。



评论一下吧
取消回复