Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#-参数化查询_C#_Sql_Db2_Sql Injection_Parameterized Query - Fatal编程技术网

c#-参数化查询

c#-参数化查询,c#,sql,db2,sql-injection,parameterized-query,C#,Sql,Db2,Sql Injection,Parameterized Query,我正在一个使用DB2数据库的.net网站上工作,该数据库使用Insert/Update和Select查询。我研究了SQL注入,我相信我已经参数化了我的查询以避免SQL注入。你能检查一下我做的是否正确,有没有更好或更充分的方法 strInsert = "INSERT INTO DATABASE.Table(NUMBER,SIGNATURE,MESSAGE,CDATE,CTIME) VALUES (?,?,?,?,?)"; DB2Command cmdInsertQuery = new DB2Co

我正在一个使用DB2数据库的.net网站上工作,该数据库使用Insert/Update和Select查询。我研究了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注入问题,并正在尝试各种方法来消除它。

add不推荐使用addwithvalue,它仍然几乎与add做相同的事情,但我的visual studio总是为此而哭泣

范例

string insertStatement =
           "Insert Login VALUES(@username,@password,@publicKey,@privateKey,@salt)";
            SqlCommand insertCommand = new SqlCommand(insertStatement, connection);
            insertCommand.Parameters.AddWithValue("@username", username);
有没有更好或更充分的方法

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注入。所以充满了问题,而人们显然不是,这让我每次都畏缩。我经常想知道,我每天使用的重要软件——例如在线烘焙软件等——有多少没有正确处理SQL注入的风险。也许最好放在感谢中。正在使用?,?,?很好,还是使用值(@NUMBER等)更好/更安全?我见过一些人使用@,只有少数人使用?,?,?cdate和ctime部分看起来可疑。您正在为参数传递字符串。如果这些字段具有字符串数据类型,则代码是可以的,但您的数据库设计不是。数据库将这些字段作为字符进行存储,并根据我的需要进行良好的存储。谢谢:)
Add
AddWithValue
更安全。见: