c# - 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();
}
}
解决方案
我从未尝试过,但我怀疑它会起作用:
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”不适用于此处
推荐阅读
- python - 如何删除第一行号列熊猫?
- arrays - 评估COM接口返回的非变量数组导致的VBScript类型不匹配错误可以通过更改语言来解决吗?
- git - Git:撤消所有直到分支开始
- unity3d - 如何在场景中的另一个位置复制实时 3D 对象?
- sql - 计算重复状态的迭代次数
- python-3.x - 如何将此脚本放入函数中?
- google-bigquery - 为什么我的 Stackdriver 导出接收器仅将最新的审核日志加载到 BigQuery 中而没有历史记录?
- server - 无法读取未定义的属性“getCompilationErrors”
- javascript - 我的函数返回值得到一个空字符串
- sql - 仅选择具有 COLUMN= 的行
如果匹配存在,否则 COLUMN IS NULL