零点博客复盘:手把手教你用C# + HTML开发EMLOG安全查询插件

大家好,我是零点博客的博主。在折腾 C# 后端与 EMLOG 的二次开发中,我踩过不少坑,今天复盘一下我是如何利用 HTML 和 C# 结合,开发一个具备 SQL 防护能力的在线数据查询工具的。

一、 为什么要在 EMLOG 里搞 C# 开发?

大家都知道 EMLOG 是 PHP 写的,但作为一个 C# 程序员,直接上手 PHP 重写整个内核太累了。我的思路是:利用 IIS 托管一个独立的 C# WebAPI 服务,通过 JSON 接口与 EMLOG 的数据库交互。

在开发这个HTML前端页面时,最大的难点不在于布局,而在于如何安全地处理用户输入,防止SQL注入。

二、 HTML 前端构建与数据交互

前端部分,我们完全使用原生HTML配合 CSS。虽然现在流行框架,但为了理解底层逻辑,我手写了一个简易的查询表单。

<!-- 零点博客实战代码片段 -->
<form id="searchForm" action="api/query" method="post">
    <div class="form-group">
        <label for="keyword">搜索关键词(防注入重点)</label>
        <!-- 使用 type="text" 和 name 属性配合后端 -->
        <input type="text" id="keyword" name="keyword" placeholder="请输入文章标题或内容..." required />
    </div>
    <button type="submit">查询</button>
</form>

<div id="resultArea">
    <!-- 结果将通过 AJAX 异步加载,无需刷新页面 -->
</div>

在 JS 部分,我使用了XMLHttpRequest 发送请求。为了解决跨域问题,C# 后端必须配置允许所有来源,但这在正式环境生产中要注意安全策略。

三、 C# 后端核心:SQL注入防护与预处理语句

这是本文的重点。如果直接把 HTML 表单里的 `` 拼接到 SQL 语句里,数据库就崩了。我在零点博客的代码中,严格使用了预处理语句。

public string QueryArticle(string keyword)
{
    string sql = "SELECT title, content FROM emlog_blog WHERE title LIKE @kw";
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        // 关键:使用参数化查询,完全阻断 SQL 注入
        cmd.Parameters.AddWithValue("@kw", "%" + keyword + "%");

        conn.Open();
        // 读取数据流
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            // 拼接 JSON 数据返回给前端
            List<dynamic> result = new List<dynamic>();
            while (reader.Read())
            {
                result.Add(new {
                    title = reader["title"].ToString(),
                    date = reader["date"].ToString()
                });
            }
            // 序列化为 JSON
            return new JavaScriptSerializer().Serialize(result);
        }
    }
}

四、 实战避坑指南

在调试过程中,我发现几个容易忽视的问题:

  1. 正则表达式的性能陷阱:在处理用户输入的脏数据时,不要只清洗 HTML 标签,用正则提取纯文本时,长正则可能会卡死线程。建议分步匹配。
  2. JSON 格式的规范:C# 返回 JSON 时,默认会把属性首字母大写(PascalCase),但前端 JS 通常是小写。我在反序列化前统一做了格式化处理。
  3. 连接池:EMLOG 数据库连接数有限制,如果 C# 接口高频调用,记得配置好连接池和连接超时。

通过这套方案,我成功在零点博客构建了一个轻量级的在线工具。只要遵循HTML语义化标签,配合 C# 强大的数据处理能力,哪怕是 PHP 写的博客也能无缝整合。

五、 总结与源码获取

这套代码展示了如何从 HTML 表单设计,到 C# 后端MySQL操作,最后通过 JSON 返回数据的完整闭环。如果你在开发中遇到SQL注入或者接口不通的问题,欢迎在评论区交流。

完整源码案例已上传至零点博客资源库,欢迎大家取用学习。