当前位置: 首页 > 面试题库 >

C#和MySQL .NET连接器-有什么方法可以防止泛型类中的SQL注入攻击?

周健
2023-03-14
问题内容

我的想法是通过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();
   }}

问题答案:

您绝对应该使用参数化查询来确保自己的安全。

不过,您不必每次都手动创建参数化查询。您可以修改提供的通用方法以接受的集合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块中进行处理,但是在代码示例中看不到这一详细程度),您应该非常小心地清理连接。



 类似资料:
  • 问题内容: 我必须为我的OJT公司编程一个应用程序管理系统。前端将在C#中完成,后端将在SQL中完成。 现在,我从来没有做过这样的项目。在学校里,我们只有关于SQL的基本课程。不知何故,我们的老师完全没有讨论SQL注入,而我直到现在才通过网上阅读与之接触。 所以无论如何,我的问题是:如何防止C#中的SQL注入?我模糊地认为,可以通过适当地屏蔽应用程序的文本字段来做到这一点,以使其仅接受指定格式的输

  • 本文向大家介绍Yii框架防止sql注入,xss攻击与csrf攻击的方法,包括了Yii框架防止sql注入,xss攻击与csrf攻击的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii框架防止sql注入,xss攻击与csrf攻击的方法。分享给大家供大家参考,具体如下: PHP中常用到的方法有: 调用: (必须放在接收数据之外) 注意: 表单提交值,为防止csrf攻击,控制器中需要加上:

  • 问题内容: 我必须在我的java程序中添加一条语句以更新数据库表: 我听说可以通过SQL注入来利用此漏洞,例如: 我的程序具有Java GUI,并且从中检索所有名称,地址和电子邮件值。我想知道黑客如何将以下代码()添加到我的插入语句中,以及如何防止这种情况发生。 问题答案: 您需要使用PreparedStatement。例如 这样可以防止注入攻击。 黑客将其放入其中的方式是,如果您要插入的字符串来

  • 本文向大家介绍Pyhton中防止SQL注入的方法,包括了Pyhton中防止SQL注入的方法的使用技巧和注意事项,需要的朋友参考一下 注意,上面的SQL字符串与后面的tuple之间的分隔符是逗号,平时拼写SQL用的是%。 如果按照以下写法,是容易产生SQL注入的: 这个和PHP里的PDO是类似的,原理同MySQL Prepared Statements。 Python Using the Pytho

  • 在研究泛型时,我注意到泛型方法和泛型类型(类或接口)在类型引入语法上的一个差异使我感到困惑。 泛型方法的语法为 文件上说 为了彼此保持一致,我希望方法语法为 ,或者类型语法(for class)为,但事实显然并非如此。 为什么一个要介绍在前,另一个要介绍在后? 我主要以的形式使用泛型,并认为可能看起来很奇怪,但这是一个主观的参数,此外对于方法也是这样。您可以调用,类似于 在寻找技术解释时,我想在指

  • 问题内容: 我有一个通用的抽象模板类。我以为如果创建特定于类型的生产者,则可以直接在通用类中注入一些DAO服务。但是我不能。 为什么?我该如何解决? 当我注入一个例如它完美地工作。但是没有泛型… 问题答案: 当您要求 容器知道您要一个类型为的bean 。如果存在这样的bean并且其类型信息已知,则容器可以满足注入。例如,类型信息保留在带注释的方法中 容器使用反射来检索该参数化的类型,并将其与请求的