C# 将SqlException.Message打印到控制台的安全性

C# 将SqlException.Message打印到控制台的安全性,c#,sql,winforms,sql-injection,C#,Sql,Winforms,Sql Injection,在调试代码的同时,我将输出写入控制台,以便监视错误和sql输出。当然,为了防止sql注入,我在需要的地方对查询进行了参数化。在网上阅读了一些关于一些注入攻击程序工作方法的文章后,我现在怀疑下面的实践是否是一个好主意 考虑以下方法 public void MyQuery(int item_id) { string sql = "SELECT * FROM table WHERE item_id = @id"; SqlCommand sqlQuery = new

在调试代码的同时,我将输出写入控制台,以便监视错误和sql输出。当然,为了防止sql注入,我在需要的地方对查询进行了参数化。在网上阅读了一些关于一些注入攻击程序工作方法的文章后,我现在怀疑下面的实践是否是一个好主意

考虑以下方法

public void MyQuery(int item_id)
{

        string sql = "SELECT * FROM table WHERE item_id = @id";


        SqlCommand sqlQuery = new SqlCommand(sql,conn);

        sqlQuery.Parameters.Add("@id", SqlDbType.Int).Value = item_id;

        try
        {
            conn.Open();
            sqlQuery.ExecuteNonQuery();
            conn.Close();
        }
        catch (SqlException ex)
        {
            Console.WriteLine(sql);
            Console.WriteLine(ex.Message);
        }
}
在我的开发机器上,控制台输出很好-这里没有风险。但是,如果我将代码保持在应用程序运行时的状态,这是否可能会打开其他可利用的途径


我知道如果我做了
MessageBox.Show(例如Message)这肯定会很糟糕,因为它就在您面前。

您正在部署一个WinForms应用程序,该应用程序连接到SQL Server,其凭据显然允许应用程序写入该SQL Server

将SQL错误泄漏到控制台是您最不担心的事情

恶意用户可以简单地使用应用程序使用的凭据在该服务器上执行任意SQL

您在客户机上部署的任何东西都必须被视为不安全的。泄漏查询不是问题所在(用户可以反编译应用程序或检查其资源并检查SQL字符串),问题在于客户端有直接的数据库连接

如果要防止客户端知道数据库在哪里,它的凭据是什么,应用程序执行的查询是什么,那么必须从应用程序中删除所有这些代码,并让数据库内容完全发生在不同的机器上。例如,您可以通过web服务与这台机器对话


然后web服务处理身份验证,并拒绝为未经身份验证的用户执行任何操作。

您可以使用调试指令:这只是一个示例方法。凭据设置正确,我对控制台输出很好奇。(delete可能是一个糟糕的函数示例)抱歉,您没有抓住要点。如果在用户机器上运行的应用程序可以直接连接到数据库服务器,然后,运行该应用程序的用户可以轻松捕获凭据,并使用另一个应用程序连接到服务器,并运行他们想要的任何SQL。即使使用该应用程序的每个用户都使用自己的登录名进行了身份验证?@CodeCaster-攻击者会如何做到这一点?他们将如何获取凭据(假设它们在配置文件中加密)?(真正的问题,好奇这是如何脆弱的)这令人担忧。我错过了这个,也不知道下一步该去哪里。