如何解决C#和MySQL .NET连接器-有什么方法可以防止泛型类中的SQL注入攻击?
您绝对应该使用参数化查询来确保自己的安全。
不过,您不必每次都手动创建参数化查询。您可以修改提供的通用方法以接受的集合MysqLParameters
:
public void Insert(string strsql, List<MysqLParameter> params)
{
if(this.OpenConnection() == true)
{
MysqLCommand cmd = new MysqLCommand(strsql, connection)
foreach(MysqLParameter param in params)
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();
this.CloseConnection();
}
}
我还应该提到,在使用完连接后(通常在一个using
块中进行处理,但是在代码示例中看不到这一详细程度),您应该非常小心地清理连接。
解决方法
我的想法是通过C#(3.5)Winforms应用程序通过MySQL .NET Connector
6.2.2与MySQL数据库创建一些通用类,以用于Insert / Update / Select。
例如:
public void Insert(string strSQL)
{
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(strSQL,connection);
cmd.ExecuteNonQuery();
this.CloseConnection();
}
}
然后,我可以从程序的任何位置通过传递SQL查询字符串来在有/无用户输入的情况下运行查询。
对SO的阅读开始给我指示,这可能会导致SQL注入攻击(对于任何用户输入值)。无论如何,要清理输入的strSQL还是我需要在需要执行数据库功能的每种方法中创建单独的参数化查询?
UPDATE1:
我的最终解决方案如下所示:
public void Insert(string strSQL,string[,] parameterValue)
{
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(strSQL,connection);
for(int i =0;i< (parameterValue.Length / 2);i++)
{
cmd.Parameters.AddWithValue(parameterValue[i,0],parameterValue[i,1]);
}
cmd.ExecuteNonQuery();
this.CloseConnection();
}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。