软件宝宝系列——SQL注入篇
今天,我给大家介绍的是软件宝宝如何防止SQL注入。
软件宝宝安全成长史系列的第二点:
“2、教会“软件宝宝”什么是好人,什么是坏人,什么东西可以吃,什么东西不能够吃!”
接下来,我们看看软件宝宝在未学会第二点之前所存在的危险,大家看了以后,一定要记得看看自己的软件宝宝是不是也存在这种威胁了?
public void UnsafeQuery (string name)
{
IDbConnection dbConnection = new SqlConnection ();
dbConnection.Open ();
IDbCommand dbCommand = dbConnection.CreateCommand ();
dbCommand.CommandText = "SELECT name, bank_account FROM customers WHERE name = '" + name + "'";
IDataReader dataReader = dbCommand.ExecuteReader ();
PrintAllValuesInReader (dataReader);
dataReader.Close ();
dbCommand.Dispose ();
dbConnection.Close ();
}上面的代码,大家看出问题了吧,还没看出,打PP了。假设我们的程序当中正在使用UnsafeQuery (txtInput.text.trim);当我们在txtInput.text文本框中,我们给宝宝喂点“HappyQQ';drop table customers;--“宝宝自从吃了这个东西以后,就生病了!所以说,我们一定要教会软件宝宝什么东西该吃,什么不该吃?好了,接下来,我们就教教软件宝宝什么东西能吃,什么不能够吃。告诉宝宝第一种方法:(不能够吃的,全部都不吃)private string FormatRemoveSQL( string strSQL )
{
string strCleanSQL = strSQL;
if( strSQL != null )
{
Array BadCommands = ";,--,create,drop,select,insert,delete,update,union,sp_,xp_".Split( ',' );//数组中保存了哪些是宝宝不能够吃的东西,这下可安全喽!
int intCommand;
for( intCommand = 0; intCommand <= BadCommands.Length - 1; intCommand++ )
{
strCleanSQL = Regex.Replace( strCleanSQL, Convert.ToString( BadCommands.GetValue( intCommand ) ), " ", RegexOptions.IgnoreCase );
}
strCleanSQL = strCleanSQL.Replace( "'", "''" );
}
return strCleanSQL;
}好了,接下来,我们用UnsafeQuery (FormatRemoveSQL(txtInput.text.trim));软件宝宝以后就不会再吃这个坏东西了!(SQL注入)告诉软件宝宝,第二种方法,坏东西不要吃,但是还是可以看看的嘛!
public void SafeQuery (string name)
{
IDbConnection dbConnection = new SqlConnection ();
dbConnection.Open ();
IDbCommand dbCommand = dbConnection.CreateCommand ();
dbCommand.CommandText = "SELECT name, bank_account FROM customers WHERE name = @name";
dbCommand.Parameters.Add (new SqlParameter ("@name", DbType.String).Value = name);
IDataReader dataReader = dbCommand.ExecuteReader ();
PrintAllValuesInReader (dataReader);
dataReader.Close ();
dbCommand.Dispose ();
dbConnection.Close ();
}当我们的程序中使用safeQuery (txtInput.text.trim);
最后总结:对付SQL注入,我们可以过滤其危险字符,或者采用参数化传值方式都可以。(文章中所介绍的方法同样可以应用到XSS漏洞的防护)
作者:黄启清
日期:2008-7-3
同时,谨以此文献给我最亲爱的妈妈(http://mama520.cn)
CNBLOGS安全团队欢迎您的加入!
成功者找方法,失败者找借口!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端