零点博客技术笔记:C#爬虫实战,手把手教你防范SQL注入与JSON解析
大家好,我是来自零点博客的技术博主。在之前的文章里,我们聊了怎么用C#做个简单的HTML解析器,最近后台私信很多朋友问:数据抓下来了,怎么存到数据库里才安全?今天咱们就来做一个真实的技术笔记复盘,实战演示如何开发一个爬虫,重点在于JSON解析和关键的SQL注入防护。
一、 背景与目标
我们的目标是写一个轻量级的采集工具,去抓取某公开API的JSON数据,并将其解析后存入MySQL数据库。在写代码前,必须明确一点:除非你能确保接口100%安全且只读,否则永远不要信任用户输入,更不要相信拼接的SQL语句。
二、 核心痛点:如何安全存入MySQL?
很多初学者喜欢用拼接字符串的方式存数据,比如 `sql = "INSERT INTO logs (title) VALUES ('" + content + "')"`。这简直是给SQL注入攻击敞开大门。我在零点博客的开发实践中,坚持使用预处理语句(Prepared Statement),这是底层的避坑指南。
三、 实战代码:C# JSON与数据库交互
下面是一个简化的代码片段,包含了HttpClient请求、Newtonsoft.Json解析以及MySQL的安全写入。
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using Newtonsoft.Json.Linq;
public class SpiderHelper
{
// 数据库连接字符串(建议使用配置文件管理,切勿硬编码明文密码)
private static string connStr = "Server=localhost;Database=spider_db;Uid=root;Pwd=your_password;";
public static void StartFetch()
{
// 1. 发送HTTP请求获取JSON数据
using (var client = new HttpClient())
{
var response = client.GetStringAsync("https://api.example.com/data").Result;
var json = JObject.Parse(response);
foreach (var item in json["data"])
{
string title = item["title"].ToString();
// 2. 数据入库:使用预处理语句防止注入
SaveToDatabase(title);
}
}
}
private static void SaveToDatabase(string title)
{
using (MySqlConnection conn = new MySqlConnection(connStr))
{
conn.Open();
// 注意:参数化查询的核心在于 @Title 占位符
string sql = "INSERT INTO articles (title, create_time) VALUES (@Title, NOW())";
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
// 添加参数,数据库会自动转义,杜绝注入
cmd.Parameters.AddWithValue("@Title", title);
cmd.ExecuteNonQuery();
Console.WriteLine($"已保存: {title}");
}
}
}
}
四、 避坑指南与底层拆解
- 编码问题:在读取网页或JSON时,如果是中文乱码,务必检查UTF-8编码设置,这是最常遇到的初阶坑。
- 事务处理:如果数据量巨大,频繁开启关闭数据库连接非常耗费性能,建议使用连接池,或者直接使用事务。
- 接口反爬:如果对方限制了频率,简单的做法是配合正则表达式提取Referer或者User-Agent,在HttpClient的请求头中伪装。
这次实战主要展示了后端开发中安全性的重要性。如果你对EMLOG二次开发或者PHP后端相关的爬虫逻辑感兴趣,欢迎在零点博客留言讨论。记住,代码不仅要能跑,更要跑得安全!



评论一下吧
取消回复