首页 > 解决方案 > SQL注入漏洞veracode c#

问题描述

Veracode 报告显示以下查询的 SQL 注入缺陷。

private const string DropDatabaseTemplate = @"DROP DATABASE [{0}]";
ExecuteNonQuery(connection, string.Format(DropDatabaseTemplate, databaseName));

private static int ExecuteNonQuery(SqlConnection connection, string commandText)
        {
            using (var command = new SqlCommand(commandText, connection))
            {
                return command.ExecuteNonQuery();
            }
        }

他们建议使用参数化的预处理语句。消除此安全漏洞的方法是什么

提前致谢。

Ans : 你可以简单地避免安全漏洞

 private static void ExecuteNonQuery(SqlConnection connection, string commandText)
        {
            using (var command = new SqlCommand("exec sp_executesql @sqlCommandText", connection))
            {
                command.Prepare();
                command.Parameters.Add("@sqlCommandText", SqlDbType.NVarChar);
                command.Parameters["@sqlCommandText"].Value = commandText;
                command.ExecuteNonQuery();
            }
        }

标签: c#sqlado.netveracodesecure-coding

解决方案


我从未尝试过,但我怀疑它会起作用:

    private static void DropDbNamed(SqlConnection connection, string name)
    {
        using (var command = new SqlCommand("EXEC @q", connection))
        {
            command.Parameters.AddWithValue("@q", $"DROP DATABASE [{name}]"); 
            var command.ExecuteScalar();
        }
    }

注意:Joel 的标准“停止使用 AddWithValue”不适用于此处


推荐阅读