零点博客复盘:C# 后端结合 jQuery 开发安全在线工具,彻底杜绝 SQL 注入

做技术博主这几年,最怕的就是读者问我“为什么我的后台会被拖库”。最近在开发零点博客的在线工具插件时,我就特意选用了C# 后端配合jQuery前端来组合拳,今天把这次开发中关于JSON 解析、接口开发以及SQL注入防护的底层逻辑整理出来,全是实操干货。

一、 为什么选 jQuery 而不是纯原生 JS?

很多人觉得 jQuery 过时了,但在写业务代码尤其是 EMLOG 主题插件时,jQuery 的生态系统依然是效率之王。处理 DOM 操作和接口开发时的JSON/XML数据解析,它能极大减少代码量。

1. 前端 AJAX 请求实战

我们在前端做一个“敏感词过滤”的小工具。为了保证交互体验,必须异步发送数据。传统的 `XMLHttpRequest` 繁琐且难懂,这里直接上 jQuery 的 `$.ajax`。

$.ajax({
    url: '/plugin.php?plugin=safe_filter&action=check', // 伪装成接口请求
    type: 'POST',
    dataType: 'json',
    data: { content: $('#input-text').val() },
    beforeSend: function() {
        $('#loading').show(); // 展示 Loading 状态
    },
    success: function(res) {
        if (res.code === 1) {
            $('#result-box').html(res.data.safe_text); // 渲染处理后的数据
        } else {
            alert(res.msg || '处理失败');
        }
    },
    complete: function() {
        $('#loading').hide(); // 无论成功失败都隐藏 Loading
    }
});

二、 后端避坑指南:C# 接口与 SQL 预处理

前端只是皮囊,后端才是核心。在处理用户输入时,SQL注入防护是底线。很多新手的 C# 程序员喜欢直接拼接字符串,这在大数据量下简直是自杀。

2. 参数化查询(防注入核心)

看下面这段代码,注意 `SqlParameter` 的用法。无论用户输入什么,数据库引擎都会将其视为数据,而不是代码执行。这是做爬虫开发或MySQL数据库操作时必须刻在骨子里的习惯。

using (SqlConnection conn = new SqlConnection(ConnStr))
{
    // 绝对不要使用拼接字符串,如 conn.Open("SELECT * FROM... " + userInput)
    string sql = "SELECT COUNT(*) FROM emlog_tool_log WHERE user_id = @UserId AND keyword = @Keyword";

    using (SqlCommand cmd = new SqlCommand(sql, conn))
    {
        // 核心:使用参数化添加,自动处理转义
        cmd.Parameters.AddWithValue("@UserId", currentUser.Id);
        cmd.Parameters.AddWithValue("@Keyword", keywordInput);

        conn.Open();
        int count = (int)cmd.ExecuteScalar();
        return count > 0;
    }
}

三、 数据处理与正则表达式应用

拿到前端传来的字符串后,我们需要用正则表达式进行二次清洗。比如过滤 HTML 标签,防止 XSS 攻击。

using System.Text.RegularExpressions;

public string StripHtml(string html)
{
    // 简单粗暴的标签过滤正则
    return Regex.Replace(html, "<.*?>", string.Empty, RegexOptions.Compiled);
}

四、 整合到 EMLOG 环境

在 EMLOG 的开发中,我们要注意路由的处理。通常不需要自己写复杂的 MVC,直接通过 `plugin.php` 模拟接口即可。记得在响应头中设置正确的 `Content-Type`,否则 jQuery 的 `dataType: 'json'` 可能会因为跨域问题解析失败。

总结一下这次实战的经验:

  • JQuery 虽老但稳,处理异步和 JSON 依然很香。
  • C# 后端 拥有强大的类型系统和正则库,处理复杂逻辑效率极高。
  • 开发在线工具时,安全永远是第一位的,SQL注入防护必须使用预处理语句。
  • 数据传输尽量使用 JSON,轻量且易读。

如果你也在做博客插件或网站开发,希望能少走弯路。源码已上传至零点博客的 GitHub,欢迎 Star!