软件宝宝系列——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安全团队欢迎您的加入!
成功者找方法,失败者找借口!