防Sql注入的两个简单解决办法
第一种方法:
1.所有传入的Sql参数统统都用SqlParameter来写.
第二种方法
1.对所有要传入的参数做Sql关键字符过滤.
用法:
string strSql = "select * from UserInfo where UID = {0}";
strSql = FormatSql(strSql,tbUID.Text);
/// <summary>
/// Sql语句过滤处理类
/// </summary>
public static class SqlFilter
{
/// <summary>
/// 过滤Sql注入的字符
/// </summary>
/// <param name="sqlCondition">要过滤的Sql数据 </param>
/// <returns> </returns>
public static string FilterInjection(string sqlCondition)
{
if (sqlCondition.Trim() != string.Empty)
sqlCondition = sqlCondition.Trim();
sqlCondition = sqlCondition.Replace("''", "");
sqlCondition = sqlCondition.Replace("'", "''");
sqlCondition = sqlCondition.Replace("_", @"\_");
sqlCondition = sqlCondition.Replace("%", @"\%");
return sqlCondition;
}
public static string AddEsCape(string strSql, string sqlCondition)
{
string m_ReturnSql = string.Empty;
if (sqlCondition.Contains(@"\%") || sqlCondition.Contains(@"\_"))
{
m_ReturnSql = string.Format(strSql, sqlCondition) + @" escape '\' ";
}
else
{
m_ReturnSql = string.Format(strSql, sqlCondition);
}
return m_ReturnSql;
}
public static string FormatSql(string strSql, string sqlCondition)
{
string m_Condition = FilterInjection(sqlCondition);
if (string.IsNullOrEmpty(m_Condition))
{
return string.Empty;
}
else
{
return AddEsCape(strSql, m_Condition);
}
}
}
1.所有传入的Sql参数统统都用SqlParameter来写.
第二种方法
1.对所有要传入的参数做Sql关键字符过滤.
用法:
string strSql = "select * from UserInfo where UID = {0}";
strSql = FormatSql(strSql,tbUID.Text);
/// <summary>
/// Sql语句过滤处理类
/// </summary>
public static class SqlFilter
{
/// <summary>
/// 过滤Sql注入的字符
/// </summary>
/// <param name="sqlCondition">要过滤的Sql数据 </param>
/// <returns> </returns>
public static string FilterInjection(string sqlCondition)
{
if (sqlCondition.Trim() != string.Empty)
sqlCondition = sqlCondition.Trim();
sqlCondition = sqlCondition.Replace("''", "");
sqlCondition = sqlCondition.Replace("'", "''");
sqlCondition = sqlCondition.Replace("_", @"\_");
sqlCondition = sqlCondition.Replace("%", @"\%");
return sqlCondition;
}
public static string AddEsCape(string strSql, string sqlCondition)
{
string m_ReturnSql = string.Empty;
if (sqlCondition.Contains(@"\%") || sqlCondition.Contains(@"\_"))
{
m_ReturnSql = string.Format(strSql, sqlCondition) + @" escape '\' ";
}
else
{
m_ReturnSql = string.Format(strSql, sqlCondition);
}
return m_ReturnSql;
}
public static string FormatSql(string strSql, string sqlCondition)
{
string m_Condition = FilterInjection(sqlCondition);
if (string.IsNullOrEmpty(m_Condition))
{
return string.Empty;
}
else
{
return AddEsCape(strSql, m_Condition);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架