【发布时间】:2016-11-03 09:50:52
【问题描述】:
下面的代码是否实现了从数据库中检索数据的安全方式? 请帮助我,我不了解 SQL 注入。有人告诉我这段代码很容易被注入。如果是,有人可以解释一下吗?谢谢。
public int CheckID(string column, string table, string wheres)
{
int i = 0;
sqlcon = ConnectToMain();
string sqlquery = "SELECT "+column+" FROM "+table+" "+wheres+"";
using (sqlcon)
{
sqlcon.Open();
SqlCommand sqlcom = new SqlCommand(sqlquery, sqlcon);
using (sqlcom)
{
SqlDataReader dr = sqlcom.ExecuteReader();
dr.Read();
if (dr.HasRows)
{
i = dr.GetInt32(0);
}
else
{
i = 0;
}
}
sqlcon.Close();
}
return i;
}
【问题讨论】:
-
这段代码有很多错误,甚至无法运行(您忘记打开连接)。它还暗示连接泄漏 -
sqlcon未定义,这意味着它是一个未清除的字段。它可能也不会在其他方法中正确关闭。 -
@Steve 谢谢你的链接,它很有帮助。
-
@PanagiotisKanavos “你忘记打开连接”是什么意思?
-
我在噪音中错过了
Open()。这个 sn-p 实际上对于可重用性更差。你最终传递了不必要的参数——你真的要搜索用户表吗?还是付款?您要执行的实际查询是什么?如果要搜索 ID 列表,请使用IN (1,2,3)子句。或者使用 EF 或像 Dapper 这样的微型 ORM 来避免这一切。