Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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# 系统或配置设置的外部控制(CWE ID 15)_C#_Connection String_Veracode_Mysqlconnection_Secure Coding - Fatal编程技术网

C# 系统或配置设置的外部控制(CWE ID 15)

C# 系统或配置设置的外部控制(CWE ID 15),c#,connection-string,veracode,mysqlconnection,secure-coding,C#,Connection String,Veracode,Mysqlconnection,Secure Coding,我们在扫描Veracode中的应用程序时遇到了安全威胁问题。获得“系统外部控制或配置设置(CWE ID 15)” 使用(var-connection=new-SqlConnection(connectionString))扫描报告的 我们正在通过传递连接字符串来检查“SQLConnectionExists” string sqlConnString = SqlHelper.GetSQLConnectionString(input.ServerName, dbName, isWinAuth, in

我们在扫描Veracode中的应用程序时遇到了安全威胁问题。获得“系统外部控制或配置设置(CWE ID 15)”

使用(var-connection=new-SqlConnection(connectionString))扫描报告的

我们正在通过传递连接字符串来检查“SQLConnectionExists”

string sqlConnString = SqlHelper.GetSQLConnectionString(input.ServerName, dbName, isWinAuth, input.UserName, input.Password);
if (!DBUtil.CheckSQLConnectionExists(sqlConnString))
{
_ValidationMessage += "Database Unreachable \n";
isValid = false;
}

public static bool CheckSQLConnectionExists(string connectionString)
        {
            bool isExist = false;
            try
            {
                using (var connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    connection.Close();
                    isExist = true;
                }
            }
            catch (Exception ex)
            {
                Logger.Instance.Log(LogLevel.EXCEPTION, "CheckSQLConnectionExists Exception : " + ex.Message);
            }
            return isExist;
        }

public static string GetSQLConnectionString(string servername, string db, bool isWinAuth, string username, string password)
        {
            System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
            builder["Data Source"] = servername;
            builder["Initial Catalog"] = db;

            if (isWinAuth)
            {
                builder["Integrated Security"] = "SSPI";
                builder["Trusted_Connection"] = "Yes";
            }
            else
            {
                builder["Persist Security Info"] = false;
                builder["User ID"] = username;
                builder["Password"] = password;
            }

            return builder.ConnectionString;
        }

在这一行
中,使用(var connection=new SqlConnection(connectionString))
我们在安全扫描中得到了错误。请您提供一些建议来解决此Veracode错误。

Veracode检测input.ServerName、input.UserName和input.Password由用户控制,这是一种风险

确保已实施验证-如果可能,请与白名单或已知的预定义服务器名称进行比较。此外,检查输入的(注入的)最小池大小是否大于预期值。使用框架类,例如使用SqlConnectionStringBuilder的框架类


建议此检查作为事后检查。

我们手中没有input.servername、input.UserName和input.Password值。这些值将根据客户的选择而改变,我们无法准确预测模式。还有其他的可能性吗?一些先科平台将SqlConnectionStringBuilder视为在运行时动态构建连接字符串的一种安全方法。如果预定义的连接字符串是不可能的,我会认为这是一个假阳性。我已经更新了我的答案,添加了一些额外的建议,正如您提到的,它被标记为“假阳性”,因为我们使用SqlConnectionStringBuilder来获取connectionstring,这将不允许连接字符串注入。