【发布时间】:2012-07-13 09:07:02
【问题描述】:
我一直在写一些简单的 c#,我通常使用相同的类和函数来插入和获取数据库中的数据。
例如,这是我的函数:
public bool insert_and_ConfirmSQL(String Query, String comments)
{
bool success = false;
NpgsqlCommand cmd = new NpgsqlCommand();
NpgsqlConnection mycon = new NpgsqlConnection();
string connstring = String.Format("Server={0};Port={1}; User Id={2};Password={3};Database={4};timeout=1000;CommandTimeout=120;", tbHost, tbPort, tbUser, tbPass, tbDataBaseName);
mycon.ConnectionString = connstring;
cmd = mycon.CreateCommand();
cmd.CommandText = Query;
mycon.Open();
int temp = 0;
try
{
temp = cmd.ExecuteNonQuery();
success = true;
}
catch
{
if (mycon.State == ConnectionState.Open)
{
mycon.Close();
}
}
return success;
}
现在我知道这个查询对于注入是不安全的,我需要使用准备好的语句。但是我不明白当我的每个查询都不同时我应该如何处理这个问题?是否有一个“通用”函数可以插入任何查询并“准备”它?
【问题讨论】:
-
我假设您正在尝试防止 SQL 注入攻击。你能展示你的查询字符串是如何构造的吗,因为这才是真正重要的。在您的代码示例中,您只是将 SQL 查询作为参数传递 - 我们无法查看该查询是如何组合在一起的;这就是您的注射预防工作应该重点关注的地方。
标签: c# sql optimization