软件宝宝系列——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安全团队欢迎您的加入!
 
posted @ 2008-07-03 23:24  HappyQQ  阅读(2929)  评论(21编辑  收藏  举报