前言:零点博客的建站心路
最近在零点博客折腾EMLOG二次开发时,遇到一个棘手的问题:需要让用户输入特定的关键词去后台数据库查询。起初我只想着在C#后端直接拼SQL语句,结果被“资深”前辈一顿数落,说这种写法早过时了,存在严重的SQL注入风险。
作为一名追求极致的博主,我决定彻底搞懂Javascript、C#与MySQL交互的最佳实践。今天就把这段真实的踩坑复盘分享出来,干货满满,建议收藏。
第一步:Javascript前端拦截与正则清洗
虽然后端再安全,用户体验也不能差。如果在用户输入错误时直接刷新页面报错,体验太差。我们可以在前端用Javascript配合正则表达式先进行“预检”。
比如,我们要校验用户输入的用户名必须包含字母和数字:
function validateInput() {
const username = document.getElementById('username').value;
// 正则匹配:6-16位,包含字母和数字
const reg = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,16}$/;
if (!reg.test(username)) {
alert('用户名格式不对,请重新输入!');
return false;
}
// 通过验证,转为JSON发送给C#后端
fetch('/api/query', {
method: 'POST',
body: JSON.stringify({ key: username })
});
}第二步:C#后端严谨的预处理语句(防注入核心)
前端验证了还不够,因为用户可以通过抓包绕过前端。真正的安全壁垒在C#后端。千万不要写string sql = "SELECT * FROM " + tableName; 这种拼接语句。
我们要使用预处理语句。在C#中连接MySQL,推荐使用MySql.Data驱动:
public string SafeQuery(string username)
{
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
// 使用参数化查询,?号是占位符
string sql = "SELECT id, content FROM blog_articles WHERE title LIKE ?keyword";
MySqlCommand cmd = new MySqlCommand(sql, conn);
// 添加参数,防止注入
cmd.Parameters.AddWithValue("?keyword", "%" + username + "%");
MySqlDataReader reader = cmd.ExecuteReader();
// 将查询结果转为JSON返回给前端
List<dynamic> result = new List<dynamic>();
while (reader.Read())
{
result.Add(new { id = reader["id"], content = reader["content"] });
}
return JsonConvert.SerializeObject(result);
}
}第三步:JSON数据的解析与接口开发
后端返回的JSON字符串,Javascript可以轻松解析。这样我们就完成了一个“前端验证+后端防护+数据交互”的完整闭环。
这套方案不仅应用在EMLOG开发中,同样适用于C# PHP等后端框架。掌握正则表达式与SQL预处理,是每个建站开发者的必修课。
如果你在实操中遇到问题,欢迎在零点博客留言,我们一起交流避坑!



评论一下吧
取消回复