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

防止在插入时进行SQL注入

陆正奇
2023-03-14
问题内容

我正在寻找一些防止SQL注入的技巧。在一个论坛上告诉我我的代码不安全,我正在寻找一个足够好的人来帮助我解决此问题。

我有一个Web表单,提交后转到aspx.cs页,然后将数据插入ms sql数据库。

protected void Submit_Click(object sender, EventArgs e)
    {
        string FullStartTime = StartTimeHourList.SelectedValue + ":" + StartTimeMinuteList.SelectedValue + " " + StartTimeAMList.SelectedValue;
        string FullEndTime = EndTimeHourList.SelectedValue + ":" + EndTimeMinuteList.SelectedValue + " " + EndTimeAMList.SelectedValue;

        OleDbConnection conn;
        OleDbCommand cmd;
        conn = new System.Data.OleDb.OleDbConnection("");
        cmd = new System.Data.OleDb.OleDbCommand();
        conn.Open();
        cmd.Connection = conn;
        var sql = String.Format(@"INSERT INTO FormTable1 (Nonprofit, Contact, Phone, Email, Event, StartDate, EndDate, StartTime, EndTime, Place, Comments, SubmitDate) values 
                                                            ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}')",
                                                           NonprofitTxtBox.Text, ContactTxtBox.Text, PhoneTxtBox.Text, EmailTxtBox.Text, EventTxtBox.Text,
                                                           StartDateTxtBox.Text, EndDateTxtBox.Text, FullStartTime, FullEndTime, PlaceTxtBox.Text, CommentsTxtBox.Text, DateTime.Now);
        cmd.CommandText = sql;
        cmd.ExecuteNonQuery();
        conn.Close();
 }

问题答案:

最直接的解决方法是
通过将字符串串联在一起来构建sql,而是使用params。如果您使用的是SqlCommand,则可以执行以下操作,否则按照@MarcB的建议进行操作

SqlCommand cmd = new SqlCommand("INSERT dbo.Table (field1, field2, field3) VALUES (@f1, @f2, @f3)", conn);

cmd.Paramters.Add("@f1", SqlDbType.VarChar, 50).Value = "abc";
cmd.Paramters.Add("@f2", SqlDbType.Int).Value = 2;
cmd.Paramters.Add("@f3", SqlDbType.VarChar, 50).Value = "some other value";


 类似资料:
  • 问题内容: 是否有可能以与PHP具有防止它们攻击的Prepared语句相同的方式来防止在Node.js(最好是使用模块)中进行SQL注入。 如果是这样,怎么办?如果没有, 那么有哪些示例 可以绕过我提供的代码(请参见下文)。 一些上下文: 我正在使用node-mysql模块制作一个包含Node.js+MySql的后端堆栈的Web应用程序。从可用性的角度来看,该模块很棒,但是它还没有实现类似于PHP

  • 问题内容: 我目前正在使用以下查询来使用php获取mysql中的值: 该代码正在运行,但是现在我担心sql注入。 如何防止SQL注入? 这样安全吗? 问题答案: 来自WordPress Codex,关于保护查询免受SQL注入攻击 : 如果进一步向下滚动,则有一些示例。 您还应该阅读数据库验证文档 ,以更全面地了解WordPress中的SQL转义。

  • 问题内容: 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容value’); DROP TABLE table;–,并且查询变为: 可以采取什么措施来防止这种情况的发生? 问题答案: Use prepared statements and parameterized queries. These are SQL sta

  • 所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。具体来说,它是利用现有应用程序,将(恶意)的 SQL 命令注入到后台数据库引擎执行的能力,它可以通过在 Web 表单中输入(恶意)SQL 语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行 SQL 语句。比如先前的很多影视网站泄露 VI

  • 问题内容: 这个问题的答案是 社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容,并且查询变为: 如何防止这种情况的发生? 问题答案: 使用准备好的语句和参数化查询。 这些是独立于任何参数发送到数据库服务器并由数据库服务器解析的SQL语句。这样,攻击者就

  • 问题内容: 我当前使用c语言处理http事件,并且我需要使用mysql进行SQL操作,然后如何防止SQL注入,有没有c库供您使用,谢谢? 问题答案: 防止SQL注入(或外壳转义注入等)的方法没有将未加引号的文字字符串传递到将某些字符视为特殊字符的接口。您需要先将字符串数据转换为安全的带引号的形式,然后再将其包含在较大的“命令字符串”中,该字符串将由SQL数据库,shell,外部命令,采用URI字符