【问题标题】:c# - Parametrized Queryc# - 参数化查询
【发布时间】:2016-08-03 00:26:19
【问题描述】:

我正在开发一个使用 DB2 数据库的 .net 网站,该数据库使用插入/更新和选择查询。我研究了 SQL 注入,我相信我已经对查询进行了参数化以避免 SQL 注入。你能检查一下我是否做得正确,有没有更好或更充分的方法?

strInsert = "INSERT INTO DATABASE.Table(NUMBER,SIGNATURE,MESSAGE,CDATE,CTIME) VALUES (?,?,?,?,?)";

DB2Command cmdInsertQuery = new DB2Command(strInsert, db2Connection1);

cmdInsertQuery.Parameters.Add("NUMBER", i);
cmdInsertQuery.Parameters.Add("SIGNATURE", strSignature.Trim());
cmdInsertQuery.Parameters.Add("MESSAGE", strMessage.Trim());
cmdInsertQuery.Parameters.Add("CDATE", DateTime.Now.ToShortDateString());
cmdInsertQuery.Parameters.Add("CTIME", DateTime.Now.ToShortTimeString());
cmdInsertQuery.ExecuteNonQuery();

查询正确插入数据并且工作正常。

【问题讨论】:

  • 我觉得不错。很高兴看到您了解 SQL 注入。 SO充满了人们显然没有的问题,这让我每次都感到畏缩。我经常想知道我每天使用多少重要的软件——例如。在线烘焙软件等——没有妥善处理SQL注入风险。
  • 或许放在codereview.stackexchange.com上会更好
  • 谢谢。正在使用 ?,?,?很好还是使用值(@NUMBER 等)更好/更安全?我见过一些人使用@,只看到少数人使用?,?,?等
  • cdate 和 ctime 部分看起来很可疑。您正在为参数传递字符串。如果这些字段具有字符串数据类型,则代码可以,但您的数据库设计不行。
  • 数据库将字段作为字符并存储它以满足我的需要。谢谢:)

标签: c# sql db2 sql-injection parameterized-query


【解决方案1】:

有没有更好或更充分的方法呢?

其中一个选项是使用 https://github.com/StackExchange/dapper-dot-net

【讨论】:

    【解决方案2】:

    add 已被弃用,使用 addwithvalue,它仍然几乎与 add 做同样的事情,但我的视觉工作室总是为它哭泣

    例子

    string insertStatement =
               "Insert Login VALUES(@username,@password,@publicKey,@privateKey,@salt)";
                SqlCommand insertCommand = new SqlCommand(insertStatement, connection);
                insertCommand.Parameters.AddWithValue("@username", username);
    

    【讨论】:

    【解决方案3】:

    是的,你做得对。很高兴知道您了解 SQL 注入问题并尝试消除它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      相关资源
      最近更新 更多