【发布时间】: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